// $ANTLR 3.1.2 /home/ravn/Workspace/pascal4j/src/pascalWalker.g 2009-07-07 23:41:12

//package org.eu.ravn.pascal;
import java.util.LinkedList;


import org.antlr.runtime.*;
import org.antlr.runtime.tree.*;import java.util.Stack;
import java.util.List;
import java.util.ArrayList;

import org.antlr.stringtemplate.*;
import org.antlr.stringtemplate.language.*;
import java.util.HashMap;
public class pascalWalker extends TreeParser {
    public static final String[] tokenNames = new String[] {
        "<invalid>", "<EOR>", "<DOWN>", "<UP>", "BLOCK", "IDLIST", "FUNC_CALL", "PROC_CALL", "SCALARTYPE", "TYPELIST", "VARIANT_TAG", "VARIANT_TAG_NO_ID", "VARIANT_CASE", "CONSTLIST", "FIELDLIST", "ARGDECLS", "VARDECL", "ARGDECL", "ARGLIST", "TYPEDECL", "FIELD", "DWIEKROPKI", "KROPKA", "PROGRAM", "LNAWIAS", "PNAWIAS", "SREDNIK", "IDENT", "LABEL", "PRZECINEK", "CONST", "ROWNOSC", "NUM_INT", "NUM_REAL", "PLUS", "MINUS", "STRING_LITERAL", "TYPE", "CHAR", "BOOLEAN", "INTEGER", "REAL", "STRING", "PACKED", "ARRAY", "LNAWIASKWADRATOWY", "PNAWIASKWADRATOWY", "OF", "LNAWIAS2", "PNAWIAS2", "RECORD", "END", "DWUKROPEK", "CASE", "WSKAZNIK", "VAR", "PROCEDURE", "FUNCTION", "PRZYPISANIE", "NIEROWNOSC", "MNIEJSZY", "MNIEJSZYLUBROWNY", "WIEKSZYLUBROWNY", "WIEKSZY", "IN", "OR", "GWIAZDKA", "SLASH", "DIV", "MOD", "AND", "NOT", "NIL", "GOTO", "BEGIN", "IF", "THEN", "ELSE", "WHILE", "DO", "REPEAT", "UNTIL", "FOR", "TO", "DOWNTO", "WITH", "FILE", "AT", "LNAWIASKLAMROWY", "PNAWIASKLAMROWY", "WS", "KOMENTARZ_1", "KOMENTARZ_2", "EXPONENT"
    };
    public static final int FUNCTION=57;
    public static final int EXPONENT=93;
    public static final int WHILE=78;
    public static final int WSKAZNIK=54;
    public static final int MOD=69;
    public static final int CONST=30;
    public static final int KOMENTARZ_2=92;
    public static final int MNIEJSZYLUBROWNY=61;
    public static final int CASE=53;
    public static final int KOMENTARZ_1=91;
    public static final int CHAR=38;
    public static final int DO=79;
    public static final int ARGLIST=18;
    public static final int LNAWIASKWADRATOWY=45;
    public static final int NOT=71;
    public static final int FIELDLIST=14;
    public static final int EOF=-1;
    public static final int FUNC_CALL=6;
    public static final int TYPE=37;
    public static final int SREDNIK=26;
    public static final int DOWNTO=84;
    public static final int STRING_LITERAL=36;
    public static final int VARIANT_CASE=12;
    public static final int ARGDECLS=15;
    public static final int PRZECINEK=29;
    public static final int NUM_REAL=33;
    public static final int BEGIN=74;
    public static final int TYPELIST=9;
    public static final int PNAWIAS=25;
    public static final int LNAWIASKLAMROWY=88;
    public static final int VAR=55;
    public static final int GOTO=73;
    public static final int ARRAY=44;
    public static final int RECORD=50;
    public static final int ROWNOSC=31;
    public static final int DWIEKROPKI=21;
    public static final int ELSE=77;
    public static final int FILE=86;
    public static final int OF=47;
    public static final int SCALARTYPE=8;
    public static final int ARGDECL=17;
    public static final int REAL=41;
    public static final int PNAWIASKWADRATOWY=46;
    public static final int PACKED=43;
    public static final int WS=90;
    public static final int NIL=72;
    public static final int UNTIL=81;
    public static final int NUM_INT=32;
    public static final int OR=65;
    public static final int IDLIST=5;
    public static final int LNAWIAS=24;
    public static final int FIELD=20;
    public static final int REPEAT=80;
    public static final int GWIAZDKA=66;
    public static final int END=51;
    public static final int MNIEJSZY=60;
    public static final int WIEKSZYLUBROWNY=62;
    public static final int LNAWIAS2=48;
    public static final int KROPKA=22;
    public static final int PROC_CALL=7;
    public static final int VARIANT_TAG_NO_ID=11;
    public static final int FOR=82;
    public static final int VARDECL=16;
    public static final int AND=70;
    public static final int PNAWIASKLAMROWY=89;
    public static final int IF=75;
    public static final int AT=87;
    public static final int BOOLEAN=39;
    public static final int NIEROWNOSC=59;
    public static final int SLASH=67;
    public static final int IN=64;
    public static final int THEN=76;
    public static final int WIEKSZY=63;
    public static final int IDENT=27;
    public static final int PLUS=34;
    public static final int TYPEDECL=19;
    public static final int CONSTLIST=13;
    public static final int WITH=85;
    public static final int INTEGER=40;
    public static final int TO=83;
    public static final int DWUKROPEK=52;
    public static final int MINUS=35;
    public static final int PROCEDURE=56;
    public static final int VARIANT_TAG=10;
    public static final int LABEL=28;
    public static final int BLOCK=4;
    public static final int PROGRAM=23;
    public static final int PRZYPISANIE=58;
    public static final int DIV=68;
    public static final int PNAWIAS2=49;
    public static final int STRING=42;

    // delegates
    // delegators

    protected static class PScope_scope {
        String name;
        List<Symbol> symbols;
        int liczbaParametrow;
        int constCount;
        int varCount;
        int ifCount;
        int whileCount;
        int repeatCount;
        int caseCount;
        int forCount;
        int ltCount;
        int leCount;
        int gtCount;
        int geCount;
        int eqCount;
        int neCount;
    }
    protected Stack PScope_stack = new Stack();


        public pascalWalker(TreeNodeStream input) {
            this(input, new RecognizerSharedState());
        }
        public pascalWalker(TreeNodeStream input, RecognizerSharedState state) {
            super(input, state);
             
        }
        
    protected StringTemplateGroup templateLib =
      new StringTemplateGroup("pascalWalkerTemplates", AngleBracketTemplateLexer.class);

    public void setTemplateLib(StringTemplateGroup templateLib) {
      this.templateLib = templateLib;
    }
    public StringTemplateGroup getTemplateLib() {
      return templateLib;
    }
    /** allows convenient multi-value initialization:
     *  "new STAttrMap().put(...).put(...)"
     */
    public static class STAttrMap extends HashMap {
      public STAttrMap put(String attrName, Object value) {
        super.put(attrName, value);
        return this;
      }
      public STAttrMap put(String attrName, int value) {
        super.put(attrName, new Integer(value));
        return this;
      }
    }

    public String[] getTokenNames() { return pascalWalker.tokenNames; }
    public String getGrammarFileName() { return "/home/ravn/Workspace/pascal4j/src/pascalWalker.g"; }


    	class Symbol {
    		public Symbol(String name, String type) {
    			this.name=name;
    			this.type=type;
    			this.count=0;
    			this.retval=0;
    		}
    		public Symbol(String name, String type, int count) {
    			this.name=name;
    			this.type=type;
    			this.count=count;
    			this.retval=0;
    		}
    		public Symbol(String name, String type, int count, int retval) {
    			this.name=name;
    			this.type=type;
    			this.count=count;
    			this.retval=retval;
    		}
    		public Symbol(String name, String type, int count, int retval,boolean glowny) {
    			this.name=name;
    			this.type=type;
    			this.count=count;
    			this.retval=retval;
    			this.glowny=glowny;
    		}
    		public int retval;
    		public String name;
    		public String type;
    		public int count;
    		public boolean glowny;
    		public boolean equals(Symbol s2) {
    			return this.name.equals(s2.name) && this.type.equals(s2.type);
    		}
    	};

    	boolean isDefined(Symbol id) {
    		/*if(id.name.toLowerCase().equals("writeln") && id.type.equals("procedura")) {
    			return true;
    		}
    		if(id.name.toLowerCase().equals("write") && id.type.equals("procedura")) {
    			return true;
    		}
    		if(id.name.toLowerCase().equals("readln") && id.type.equals("procedura")) {
    			return true;
    		}
    		if(id.name.toLowerCase().equals("read") && id.type.equals("procedura")) {
    			return true;
    		}*/
    		List<String> proceduryWbudowane=new LinkedList<String>();
    		proceduryWbudowane.add("writeln");
    		//proceduryWbudowane.add("write");
    		//proceduryWbudowane.add("readln");
    		//proceduryWbudowane.add("read");
    		if(proceduryWbudowane.contains(id.name.toLowerCase()))
    			return true;
    		for (int s=PScope_stack.size()-1; s>=0; s--) {
    			for (Symbol symbol : ((PScope_scope)PScope_stack.elementAt(s)).symbols) {
    				if(symbol.name.equals(id.name)) {
    					//System.out.println("Znaleziono");
    					return true;
    				}
    			}
    		}
    		return false;
    	}
    	
    	int najwiekszy(int v1,int v2) {
    		if(v1>=v2)
    			return v1;
    		return v2;
    	}
    	
    	Symbol getSymbol(String name, String type) {
    		for (int s=PScope_stack.size()-1; s>=0; s--) {
    			for (Symbol symbol : ((PScope_scope)PScope_stack.elementAt(s)).symbols) {
    				if(symbol.name.equals(name)) {
    					//System.out.println("Znaleziono");
    					return symbol;
    				}
    			}
    		}
    		return null;
    	}
    	
    	Symbol getSymbol(Symbol id) {
    		return getSymbol(id.name,id.type);
    	}
      private static String programName;


    public static class program_return extends TreeRuleReturnScope {
        public StringTemplate st;
        public Object getTemplate() { return st; }
        public String toString() { return st==null?null:st.toString(); }
    };

    // $ANTLR start "program"
    // /home/ravn/Workspace/pascal4j/src/pascalWalker.g:128:1: program : np= naglowek_programu b= blok[true,0] -> program(naglowek=$np.stblok=$b.st);
    public final pascalWalker.program_return program() throws RecognitionException {
        PScope_stack.push(new PScope_scope());

        pascalWalker.program_return retval = new pascalWalker.program_return();
        retval.start = input.LT(1);

        pascalWalker.naglowek_programu_return np = null;

        pascalWalker.blok_return b = null;



        	((PScope_scope)PScope_stack.peek()).symbols = new ArrayList<Symbol>();
        	((PScope_scope)PScope_stack.peek()).name = "global";
        	

        try {
            // /home/ravn/Workspace/pascal4j/src/pascalWalker.g:135:5: (np= naglowek_programu b= blok[true,0] -> program(naglowek=$np.stblok=$b.st))
            // /home/ravn/Workspace/pascal4j/src/pascalWalker.g:135:7: np= naglowek_programu b= blok[true,0]
            {
            pushFollow(FOLLOW_naglowek_programu_in_program74);
            np=naglowek_programu();

            state._fsp--;

            pushFollow(FOLLOW_blok_in_program84);
            b=blok(true, 0);

            state._fsp--;



            // TEMPLATE REWRITE
            // 137:8: -> program(naglowek=$np.stblok=$b.st)
            {
                retval.st = templateLib.getInstanceOf("program",
              new STAttrMap().put("naglowek", (np!=null?np.st:null)).put("blok", (b!=null?b.st:null)));
            }


            }

        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
        }
        finally {
            PScope_stack.pop();

        }
        return retval;
    }
    // $ANTLR end "program"

    public static class naglowek_programu_return extends TreeRuleReturnScope {
        public StringTemplate st;
        public Object getTemplate() { return st; }
        public String toString() { return st==null?null:st.toString(); }
    };

    // $ANTLR start "naglowek_programu"
    // /home/ravn/Workspace/pascal4j/src/pascalWalker.g:140:1: naglowek_programu : ^( PROGRAM IDENT ( lista_identyfikatorow[0,false] )? ) -> naglowek(id=$IDENT.textids=$lista_identyfikatorow.st);
    public final pascalWalker.naglowek_programu_return naglowek_programu() throws RecognitionException {
        pascalWalker.naglowek_programu_return retval = new pascalWalker.naglowek_programu_return();
        retval.start = input.LT(1);

        CommonTree IDENT1=null;
        pascalWalker.lista_identyfikatorow_return lista_identyfikatorow2 = null;


        try {
            // /home/ravn/Workspace/pascal4j/src/pascalWalker.g:141:5: ( ^( PROGRAM IDENT ( lista_identyfikatorow[0,false] )? ) -> naglowek(id=$IDENT.textids=$lista_identyfikatorow.st))
            // /home/ravn/Workspace/pascal4j/src/pascalWalker.g:141:7: ^( PROGRAM IDENT ( lista_identyfikatorow[0,false] )? )
            {
            match(input,PROGRAM,FOLLOW_PROGRAM_in_naglowek_programu123); 

            match(input, Token.DOWN, null); 
            IDENT1=(CommonTree)match(input,IDENT,FOLLOW_IDENT_in_naglowek_programu125); 
            // /home/ravn/Workspace/pascal4j/src/pascalWalker.g:141:23: ( lista_identyfikatorow[0,false] )?
            int alt1=2;
            int LA1_0 = input.LA(1);

            if ( (LA1_0==IDLIST) ) {
                alt1=1;
            }
            switch (alt1) {
                case 1 :
                    // /home/ravn/Workspace/pascal4j/src/pascalWalker.g:141:23: lista_identyfikatorow[0,false]
                    {
                    pushFollow(FOLLOW_lista_identyfikatorow_in_naglowek_programu127);
                    lista_identyfikatorow2=lista_identyfikatorow(0, false);

                    state._fsp--;


                    }
                    break;

            }


            match(input, Token.UP, null); 
             programName=(IDENT1!=null?IDENT1.getText():null); 


            // TEMPLATE REWRITE
            // 141:85: -> naglowek(id=$IDENT.textids=$lista_identyfikatorow.st)
            {
                retval.st = templateLib.getInstanceOf("naglowek",
              new STAttrMap().put("id", (IDENT1!=null?IDENT1.getText():null)).put("ids", (lista_identyfikatorow2!=null?lista_identyfikatorow2.st:null)));
            }


            }

        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
        }
        finally {
        }
        return retval;
    }
    // $ANTLR end "naglowek_programu"

    public static class identyfikator_return extends TreeRuleReturnScope {
        public StringTemplate st;
        public Object getTemplate() { return st; }
        public String toString() { return st==null?null:st.toString(); }
    };

    // $ANTLR start "identyfikator"
    // /home/ravn/Workspace/pascal4j/src/pascalWalker.g:144:1: identyfikator : IDENT ;
    public final pascalWalker.identyfikator_return identyfikator() throws RecognitionException {
        pascalWalker.identyfikator_return retval = new pascalWalker.identyfikator_return();
        retval.start = input.LT(1);

        try {
            // /home/ravn/Workspace/pascal4j/src/pascalWalker.g:145:5: ( IDENT )
            // /home/ravn/Workspace/pascal4j/src/pascalWalker.g:145:7: IDENT
            {
            match(input,IDENT,FOLLOW_IDENT_in_identyfikator162); 

            }

        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
        }
        finally {
        }
        return retval;
    }
    // $ANTLR end "identyfikator"

    public static class blok_return extends TreeRuleReturnScope {
        public int stack;
        public int locals;
        public StringTemplate st;
        public Object getTemplate() { return st; }
        public String toString() { return st==null?null:st.toString(); }
    };

    // $ANTLR start "blok"
    // /home/ravn/Workspace/pascal4j/src/pascalWalker.g:148:1: blok[boolean glowny,int varc] returns [int stack,int locals] : (e= czesc_deklarujaca_etykiety[glowny] | s= czesc_definiujaca_stale[glowny] | t= czesc_definiujaca_typy[glowny] | z= czesc_deklarujaca_zmienne[glowny] | o= czesc_deklarujaca_procedury_i_funkcje[glowny] )* i= instrukcja_zlozona ({...}? -> blok_glowny(etykiety=$e.ststale=$s.sttypy=$t.stzmienne=$z.stoperacje=$o.stinstrukcje=$i.ststack=$i.liczbaInstrukcjivarnum=$PScope::varCount+$PScope::constCount+1) | {...}? -> blok(etykiety=$e.ststale=$s.sttypy=$t.stzmienne=$z.stoperacje=$o.stinstrukcje=$i.ststack=$i.liczbaInstrukcjivarnum=$PScope::varCount+$PScope::constCount)) ;
    public final pascalWalker.blok_return blok(boolean glowny, int varc) throws RecognitionException {
        PScope_stack.push(new PScope_scope());

        pascalWalker.blok_return retval = new pascalWalker.blok_return();
        retval.start = input.LT(1);

        pascalWalker.czesc_deklarujaca_etykiety_return e = null;

        pascalWalker.czesc_definiujaca_stale_return s = null;

        pascalWalker.czesc_definiujaca_typy_return t = null;

        pascalWalker.czesc_deklarujaca_zmienne_return z = null;

        pascalWalker.czesc_deklarujaca_procedury_i_funkcje_return o = null;

        pascalWalker.instrukcja_zlozona_return i = null;



        	//System.out.println("blok "+varc);
        	((PScope_scope)PScope_stack.peek()).symbols = new ArrayList<Symbol>();
        	((PScope_scope)PScope_stack.peek()).name = "blok";
        	((PScope_scope)PScope_stack.peek()).constCount = 0;
        	((PScope_scope)PScope_stack.peek()).varCount = varc;
        	((PScope_scope)PScope_stack.peek()).ifCount = 0;
        	((PScope_scope)PScope_stack.peek()).whileCount = 0;
        	((PScope_scope)PScope_stack.peek()).repeatCount = 0;
        	((PScope_scope)PScope_stack.peek()).caseCount = 0;
        	((PScope_scope)PScope_stack.peek()).forCount = 0;
        	((PScope_scope)PScope_stack.peek()).ltCount = 0;
        	((PScope_scope)PScope_stack.peek()).leCount = 0;
        	((PScope_scope)PScope_stack.peek()).gtCount = 0;
        	((PScope_scope)PScope_stack.peek()).geCount = 0;
        	((PScope_scope)PScope_stack.peek()).eqCount = 0;
        	((PScope_scope)PScope_stack.peek()).neCount = 0;

        try {
            // /home/ravn/Workspace/pascal4j/src/pascalWalker.g:168:5: ( (e= czesc_deklarujaca_etykiety[glowny] | s= czesc_definiujaca_stale[glowny] | t= czesc_definiujaca_typy[glowny] | z= czesc_deklarujaca_zmienne[glowny] | o= czesc_deklarujaca_procedury_i_funkcje[glowny] )* i= instrukcja_zlozona ({...}? -> blok_glowny(etykiety=$e.ststale=$s.sttypy=$t.stzmienne=$z.stoperacje=$o.stinstrukcje=$i.ststack=$i.liczbaInstrukcjivarnum=$PScope::varCount+$PScope::constCount+1) | {...}? -> blok(etykiety=$e.ststale=$s.sttypy=$t.stzmienne=$z.stoperacje=$o.stinstrukcje=$i.ststack=$i.liczbaInstrukcjivarnum=$PScope::varCount+$PScope::constCount)) )
            // /home/ravn/Workspace/pascal4j/src/pascalWalker.g:168:7: (e= czesc_deklarujaca_etykiety[glowny] | s= czesc_definiujaca_stale[glowny] | t= czesc_definiujaca_typy[glowny] | z= czesc_deklarujaca_zmienne[glowny] | o= czesc_deklarujaca_procedury_i_funkcje[glowny] )* i= instrukcja_zlozona ({...}? -> blok_glowny(etykiety=$e.ststale=$s.sttypy=$t.stzmienne=$z.stoperacje=$o.stinstrukcje=$i.ststack=$i.liczbaInstrukcjivarnum=$PScope::varCount+$PScope::constCount+1) | {...}? -> blok(etykiety=$e.ststale=$s.sttypy=$t.stzmienne=$z.stoperacje=$o.stinstrukcje=$i.ststack=$i.liczbaInstrukcjivarnum=$PScope::varCount+$PScope::constCount))
            {
            // /home/ravn/Workspace/pascal4j/src/pascalWalker.g:168:7: (e= czesc_deklarujaca_etykiety[glowny] | s= czesc_definiujaca_stale[glowny] | t= czesc_definiujaca_typy[glowny] | z= czesc_deklarujaca_zmienne[glowny] | o= czesc_deklarujaca_procedury_i_funkcje[glowny] )*
            loop2:
            do {
                int alt2=6;
                switch ( input.LA(1) ) {
                case LABEL:
                    {
                    alt2=1;
                    }
                    break;
                case CONST:
                    {
                    alt2=2;
                    }
                    break;
                case TYPE:
                    {
                    alt2=3;
                    }
                    break;
                case VAR:
                    {
                    alt2=4;
                    }
                    break;
                case PROCEDURE:
                case FUNCTION:
                    {
                    alt2=5;
                    }
                    break;

                }

                switch (alt2) {
            	case 1 :
            	    // /home/ravn/Workspace/pascal4j/src/pascalWalker.g:168:9: e= czesc_deklarujaca_etykiety[glowny]
            	    {
            	    pushFollow(FOLLOW_czesc_deklarujaca_etykiety_in_blok198);
            	    e=czesc_deklarujaca_etykiety(glowny);

            	    state._fsp--;


            	    }
            	    break;
            	case 2 :
            	    // /home/ravn/Workspace/pascal4j/src/pascalWalker.g:169:9: s= czesc_definiujaca_stale[glowny]
            	    {
            	    pushFollow(FOLLOW_czesc_definiujaca_stale_in_blok211);
            	    s=czesc_definiujaca_stale(glowny);

            	    state._fsp--;


            	    }
            	    break;
            	case 3 :
            	    // /home/ravn/Workspace/pascal4j/src/pascalWalker.g:170:9: t= czesc_definiujaca_typy[glowny]
            	    {
            	    pushFollow(FOLLOW_czesc_definiujaca_typy_in_blok224);
            	    t=czesc_definiujaca_typy(glowny);

            	    state._fsp--;


            	    }
            	    break;
            	case 4 :
            	    // /home/ravn/Workspace/pascal4j/src/pascalWalker.g:171:9: z= czesc_deklarujaca_zmienne[glowny]
            	    {
            	    pushFollow(FOLLOW_czesc_deklarujaca_zmienne_in_blok237);
            	    z=czesc_deklarujaca_zmienne(glowny);

            	    state._fsp--;


            	    }
            	    break;
            	case 5 :
            	    // /home/ravn/Workspace/pascal4j/src/pascalWalker.g:172:9: o= czesc_deklarujaca_procedury_i_funkcje[glowny]
            	    {
            	    pushFollow(FOLLOW_czesc_deklarujaca_procedury_i_funkcje_in_blok250);
            	    o=czesc_deklarujaca_procedury_i_funkcje(glowny);

            	    state._fsp--;


            	    }
            	    break;

            	default :
            	    break loop2;
                }
            } while (true);

            pushFollow(FOLLOW_instrukcja_zlozona_in_blok270);
            i=instrukcja_zlozona();

            state._fsp--;

             retval.stack =(i!=null?i.liczbaInstrukcji:0); retval.locals =(z!=null?z.count:0)+(s!=null?s.count:0); 
            // /home/ravn/Workspace/pascal4j/src/pascalWalker.g:176:7: ({...}? -> blok_glowny(etykiety=$e.ststale=$s.sttypy=$t.stzmienne=$z.stoperacje=$o.stinstrukcje=$i.ststack=$i.liczbaInstrukcjivarnum=$PScope::varCount+$PScope::constCount+1) | {...}? -> blok(etykiety=$e.ststale=$s.sttypy=$t.stzmienne=$z.stoperacje=$o.stinstrukcje=$i.ststack=$i.liczbaInstrukcjivarnum=$PScope::varCount+$PScope::constCount))
            int alt3=2;
            int LA3_0 = input.LA(1);

            if ( (LA3_0==EOF) ) {
                int LA3_1 = input.LA(2);

                if ( ((glowny)) ) {
                    alt3=1;
                }
                else if ( ((!glowny)) ) {
                    alt3=2;
                }
                else {
                    NoViableAltException nvae =
                        new NoViableAltException("", 3, 1, input);

                    throw nvae;
                }
            }
            else if ( (LA3_0==UP) ) {
                int LA3_2 = input.LA(2);

                if ( ((glowny)) ) {
                    alt3=1;
                }
                else if ( ((!glowny)) ) {
                    alt3=2;
                }
                else {
                    NoViableAltException nvae =
                        new NoViableAltException("", 3, 2, input);

                    throw nvae;
                }
            }
            else {
                NoViableAltException nvae =
                    new NoViableAltException("", 3, 0, input);

                throw nvae;
            }
            switch (alt3) {
                case 1 :
                    // /home/ravn/Workspace/pascal4j/src/pascalWalker.g:176:9: {...}?
                    {
                    if ( !((glowny)) ) {
                        throw new FailedPredicateException(input, "blok", "$glowny");
                    }


                    // TEMPLATE REWRITE
                    // 176:20: -> blok_glowny(etykiety=$e.ststale=$s.sttypy=$t.stzmienne=$z.stoperacje=$o.stinstrukcje=$i.ststack=$i.liczbaInstrukcjivarnum=$PScope::varCount+$PScope::constCount+1)
                    {
                        retval.st = templateLib.getInstanceOf("blok_glowny",
                      new STAttrMap().put("etykiety", (e!=null?e.st:null)).put("stale", (s!=null?s.st:null)).put("typy", (t!=null?t.st:null)).put("zmienne", (z!=null?z.st:null)).put("operacje", (o!=null?o.st:null)).put("instrukcje", (i!=null?i.st:null)).put("stack", (i!=null?i.liczbaInstrukcji:0)).put("varnum", ((PScope_scope)PScope_stack.peek()).varCount+((PScope_scope)PScope_stack.peek()).constCount+1));
                    }


                    }
                    break;
                case 2 :
                    // /home/ravn/Workspace/pascal4j/src/pascalWalker.g:177:9: {...}?
                    {
                    if ( !((!glowny)) ) {
                        throw new FailedPredicateException(input, "blok", "!$glowny");
                    }


                    // TEMPLATE REWRITE
                    // 177:21: -> blok(etykiety=$e.ststale=$s.sttypy=$t.stzmienne=$z.stoperacje=$o.stinstrukcje=$i.ststack=$i.liczbaInstrukcjivarnum=$PScope::varCount+$PScope::constCount)
                    {
                        retval.st = templateLib.getInstanceOf("blok",
                      new STAttrMap().put("etykiety", (e!=null?e.st:null)).put("stale", (s!=null?s.st:null)).put("typy", (t!=null?t.st:null)).put("zmienne", (z!=null?z.st:null)).put("operacje", (o!=null?o.st:null)).put("instrukcje", (i!=null?i.st:null)).put("stack", (i!=null?i.liczbaInstrukcji:0)).put("varnum", ((PScope_scope)PScope_stack.peek()).varCount+((PScope_scope)PScope_stack.peek()).constCount));
                    }


                    }
                    break;

            }


            }

        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
        }
        finally {
            PScope_stack.pop();

        }
        return retval;
    }
    // $ANTLR end "blok"

    public static class czesc_deklarujaca_etykiety_return extends TreeRuleReturnScope {
        public StringTemplate st;
        public Object getTemplate() { return st; }
        public String toString() { return st==null?null:st.toString(); }
    };

    // $ANTLR start "czesc_deklarujaca_etykiety"
    // /home/ravn/Workspace/pascal4j/src/pascalWalker.g:180:1: czesc_deklarujaca_etykiety[boolean glowny] : ^( LABEL (e+= etykieta )+ ) -> etykiety(ets=$e);
    public final pascalWalker.czesc_deklarujaca_etykiety_return czesc_deklarujaca_etykiety(boolean glowny) throws RecognitionException {
        pascalWalker.czesc_deklarujaca_etykiety_return retval = new pascalWalker.czesc_deklarujaca_etykiety_return();
        retval.start = input.LT(1);

        List list_e=null;
        pascalWalker.etykieta_return e = null;
         e = null;
        try {
            // /home/ravn/Workspace/pascal4j/src/pascalWalker.g:181:5: ( ^( LABEL (e+= etykieta )+ ) -> etykiety(ets=$e))
            // /home/ravn/Workspace/pascal4j/src/pascalWalker.g:181:7: ^( LABEL (e+= etykieta )+ )
            {
            match(input,LABEL,FOLLOW_LABEL_in_czesc_deklarujaca_etykiety404); 

            match(input, Token.DOWN, null); 
            // /home/ravn/Workspace/pascal4j/src/pascalWalker.g:181:16: (e+= etykieta )+
            int cnt4=0;
            loop4:
            do {
                int alt4=2;
                int LA4_0 = input.LA(1);

                if ( (LA4_0==NUM_INT) ) {
                    alt4=1;
                }


                switch (alt4) {
            	case 1 :
            	    // /home/ravn/Workspace/pascal4j/src/pascalWalker.g:181:16: e+= etykieta
            	    {
            	    pushFollow(FOLLOW_etykieta_in_czesc_deklarujaca_etykiety408);
            	    e=etykieta();

            	    state._fsp--;

            	    if (list_e==null) list_e=new ArrayList();
            	    list_e.add(e.getTemplate());


            	    }
            	    break;

            	default :
            	    if ( cnt4 >= 1 ) break loop4;
                        EarlyExitException eee =
                            new EarlyExitException(4, input);
                        throw eee;
                }
                cnt4++;
            } while (true);


            match(input, Token.UP, null); 


            // TEMPLATE REWRITE
            // 181:29: -> etykiety(ets=$e)
            {
                retval.st = templateLib.getInstanceOf("etykiety",
              new STAttrMap().put("ets", list_e));
            }


            }

        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
        }
        finally {
        }
        return retval;
    }
    // $ANTLR end "czesc_deklarujaca_etykiety"

    public static class etykieta_return extends TreeRuleReturnScope {
        public StringTemplate st;
        public Object getTemplate() { return st; }
        public String toString() { return st==null?null:st.toString(); }
    };

    // $ANTLR start "etykieta"
    // /home/ravn/Workspace/pascal4j/src/pascalWalker.g:184:1: etykieta : NUM_INT -> przekaz(item=$NUM_INT.text);
    public final pascalWalker.etykieta_return etykieta() throws RecognitionException {
        pascalWalker.etykieta_return retval = new pascalWalker.etykieta_return();
        retval.start = input.LT(1);

        CommonTree NUM_INT3=null;

        try {
            // /home/ravn/Workspace/pascal4j/src/pascalWalker.g:185:5: ( NUM_INT -> przekaz(item=$NUM_INT.text))
            // /home/ravn/Workspace/pascal4j/src/pascalWalker.g:185:7: NUM_INT
            {
            NUM_INT3=(CommonTree)match(input,NUM_INT,FOLLOW_NUM_INT_in_etykieta436); 

                		//System.out.println("etykieta: "+(NUM_INT3!=null?NUM_INT3.getText():null));
                		Symbol newSymbol=new Symbol((NUM_INT3!=null?NUM_INT3.getText():null),"etykieta");
                		if(((PScope_scope)PScope_stack.peek()).symbols.contains(newSymbol)) {
                			System.err.println("Etykieta "+newSymbol.name+" zostala juz wczesniej zdeklarowana.");
                			System.exit(1);
                		}
                		((PScope_scope)PScope_stack.peek()).symbols.add(newSymbol);
                


            // TEMPLATE REWRITE
            // 193:7: -> przekaz(item=$NUM_INT.text)
            {
                retval.st = templateLib.getInstanceOf("przekaz",
              new STAttrMap().put("item", (NUM_INT3!=null?NUM_INT3.getText():null)));
            }


            }

        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
        }
        finally {
        }
        return retval;
    }
    // $ANTLR end "etykieta"

    public static class czesc_definiujaca_stale_return extends TreeRuleReturnScope {
        public int count;
        public StringTemplate st;
        public Object getTemplate() { return st; }
        public String toString() { return st==null?null:st.toString(); }
    };

    // $ANTLR start "czesc_definiujaca_stale"
    // /home/ravn/Workspace/pascal4j/src/pascalWalker.g:196:1: czesc_definiujaca_stale[boolean glowny] returns [int count] : ^( CONST (consts+= definicja_stalej[glowny] )+ ) -> stale(consts=$consts);
    public final pascalWalker.czesc_definiujaca_stale_return czesc_definiujaca_stale(boolean glowny) throws RecognitionException {
        pascalWalker.czesc_definiujaca_stale_return retval = new pascalWalker.czesc_definiujaca_stale_return();
        retval.start = input.LT(1);

        List list_consts=null;
        pascalWalker.definicja_stalej_return consts = null;
         consts = null;
        try {
            // /home/ravn/Workspace/pascal4j/src/pascalWalker.g:197:5: ( ^( CONST (consts+= definicja_stalej[glowny] )+ ) -> stale(consts=$consts))
            // /home/ravn/Workspace/pascal4j/src/pascalWalker.g:197:7: ^( CONST (consts+= definicja_stalej[glowny] )+ )
            {
            match(input,CONST,FOLLOW_CONST_in_czesc_definiujaca_stale470); 

            match(input, Token.DOWN, null); 
            // /home/ravn/Workspace/pascal4j/src/pascalWalker.g:197:21: (consts+= definicja_stalej[glowny] )+
            int cnt5=0;
            loop5:
            do {
                int alt5=2;
                int LA5_0 = input.LA(1);

                if ( (LA5_0==ROWNOSC) ) {
                    alt5=1;
                }


                switch (alt5) {
            	case 1 :
            	    // /home/ravn/Workspace/pascal4j/src/pascalWalker.g:197:21: consts+= definicja_stalej[glowny]
            	    {
            	    pushFollow(FOLLOW_definicja_stalej_in_czesc_definiujaca_stale474);
            	    consts=definicja_stalej(glowny);

            	    state._fsp--;

            	    if (list_consts==null) list_consts=new ArrayList();
            	    list_consts.add(consts.getTemplate());


            	    }
            	    break;

            	default :
            	    if ( cnt5 >= 1 ) break loop5;
                        EarlyExitException eee =
                            new EarlyExitException(5, input);
                        throw eee;
                }
                cnt5++;
            } while (true);


            match(input, Token.UP, null); 
             retval.count =list_consts.size(); 


            // TEMPLATE REWRITE
            // 197:77: -> stale(consts=$consts)
            {
                retval.st = templateLib.getInstanceOf("stale",
              new STAttrMap().put("consts", list_consts));
            }


            }

        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
        }
        finally {
        }
        return retval;
    }
    // $ANTLR end "czesc_definiujaca_stale"

    public static class definicja_stalej_return extends TreeRuleReturnScope {
        public StringTemplate st;
        public Object getTemplate() { return st; }
        public String toString() { return st==null?null:st.toString(); }
    };

    // $ANTLR start "definicja_stalej"
    // /home/ravn/Workspace/pascal4j/src/pascalWalker.g:200:1: definicja_stalej[boolean glowny] : ^( ROWNOSC IDENT stala ) ({...}? -> stala_glowny(id=$IDENT.textvalue=$stala.constantstring=$stala.typ==3 ? \"str\" : nullfloat=$stala.typ==2 ? \"float\" : null) | {...}? -> stala(id=$IDENT.textvalue=$stala.constantstring=$stala.typ==3 ? \"str\" : nullfloat=$stala.typ==2 ? \"float\" : null)) ;
    public final pascalWalker.definicja_stalej_return definicja_stalej(boolean glowny) throws RecognitionException {
        pascalWalker.definicja_stalej_return retval = new pascalWalker.definicja_stalej_return();
        retval.start = input.LT(1);

        CommonTree IDENT4=null;
        pascalWalker.stala_return stala5 = null;


        try {
            // /home/ravn/Workspace/pascal4j/src/pascalWalker.g:201:5: ( ^( ROWNOSC IDENT stala ) ({...}? -> stala_glowny(id=$IDENT.textvalue=$stala.constantstring=$stala.typ==3 ? \"str\" : nullfloat=$stala.typ==2 ? \"float\" : null) | {...}? -> stala(id=$IDENT.textvalue=$stala.constantstring=$stala.typ==3 ? \"str\" : nullfloat=$stala.typ==2 ? \"float\" : null)) )
            // /home/ravn/Workspace/pascal4j/src/pascalWalker.g:201:7: ^( ROWNOSC IDENT stala ) ({...}? -> stala_glowny(id=$IDENT.textvalue=$stala.constantstring=$stala.typ==3 ? \"str\" : nullfloat=$stala.typ==2 ? \"float\" : null) | {...}? -> stala(id=$IDENT.textvalue=$stala.constantstring=$stala.typ==3 ? \"str\" : nullfloat=$stala.typ==2 ? \"float\" : null))
            {
            match(input,ROWNOSC,FOLLOW_ROWNOSC_in_definicja_stalej507); 

            match(input, Token.DOWN, null); 
            IDENT4=(CommonTree)match(input,IDENT,FOLLOW_IDENT_in_definicja_stalej509); 
            pushFollow(FOLLOW_stala_in_definicja_stalej511);
            stala5=stala();

            state._fsp--;


            match(input, Token.UP, null); 

                		//System.out.println("stala: "+(IDENT4!=null?IDENT4.getText():null));
                		Symbol newSymbol=new Symbol((IDENT4!=null?IDENT4.getText():null),"stala",((PScope_scope)PScope_stack.peek()).constCount,(stala5!=null?stala5.typ:0),glowny);
                		if(((PScope_scope)PScope_stack.peek()).symbols.contains(newSymbol)) {
                			System.err.println("Stala "+newSymbol.name+" zostala juz wczesniej zdeklarowana.");
                			System.exit(1);
                		}
                		((PScope_scope)PScope_stack.peek()).symbols.add(newSymbol);
                		((PScope_scope)PScope_stack.peek()).constCount++;
                	
            // /home/ravn/Workspace/pascal4j/src/pascalWalker.g:210:8: ({...}? -> stala_glowny(id=$IDENT.textvalue=$stala.constantstring=$stala.typ==3 ? \"str\" : nullfloat=$stala.typ==2 ? \"float\" : null) | {...}? -> stala(id=$IDENT.textvalue=$stala.constantstring=$stala.typ==3 ? \"str\" : nullfloat=$stala.typ==2 ? \"float\" : null))
            int alt6=2;
            int LA6_0 = input.LA(1);

            if ( (LA6_0==UP) ) {
                int LA6_1 = input.LA(2);

                if ( ((glowny)) ) {
                    alt6=1;
                }
                else if ( ((!glowny)) ) {
                    alt6=2;
                }
                else {
                    NoViableAltException nvae =
                        new NoViableAltException("", 6, 1, input);

                    throw nvae;
                }
            }
            else if ( (LA6_0==ROWNOSC) ) {
                int LA6_2 = input.LA(2);

                if ( ((glowny)) ) {
                    alt6=1;
                }
                else if ( ((!glowny)) ) {
                    alt6=2;
                }
                else {
                    NoViableAltException nvae =
                        new NoViableAltException("", 6, 2, input);

                    throw nvae;
                }
            }
            else {
                NoViableAltException nvae =
                    new NoViableAltException("", 6, 0, input);

                throw nvae;
            }
            switch (alt6) {
                case 1 :
                    // /home/ravn/Workspace/pascal4j/src/pascalWalker.g:210:10: {...}?
                    {
                    if ( !((glowny)) ) {
                        throw new FailedPredicateException(input, "definicja_stalej", "$glowny");
                    }


                    // TEMPLATE REWRITE
                    // 210:21: -> stala_glowny(id=$IDENT.textvalue=$stala.constantstring=$stala.typ==3 ? \"str\" : nullfloat=$stala.typ==2 ? \"float\" : null)
                    {
                        retval.st = templateLib.getInstanceOf("stala_glowny",
                      new STAttrMap().put("id", (IDENT4!=null?IDENT4.getText():null)).put("value", (stala5!=null?stala5.constant:null)).put("string", (stala5!=null?stala5.typ:0)==3 ? "str" : null).put("float", (stala5!=null?stala5.typ:0)==2 ? "float" : null));
                    }


                    }
                    break;
                case 2 :
                    // /home/ravn/Workspace/pascal4j/src/pascalWalker.g:211:9: {...}?
                    {
                    if ( !((!glowny)) ) {
                        throw new FailedPredicateException(input, "definicja_stalej", "!$glowny");
                    }


                    // TEMPLATE REWRITE
                    // 211:21: -> stala(id=$IDENT.textvalue=$stala.constantstring=$stala.typ==3 ? \"str\" : nullfloat=$stala.typ==2 ? \"float\" : null)
                    {
                        retval.st = templateLib.getInstanceOf("stala",
                      new STAttrMap().put("id", (IDENT4!=null?IDENT4.getText():null)).put("value", (stala5!=null?stala5.constant:null)).put("string", (stala5!=null?stala5.typ:0)==3 ? "str" : null).put("float", (stala5!=null?stala5.typ:0)==2 ? "float" : null));
                    }


                    }
                    break;

            }


            }

        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
        }
        finally {
        }
        return retval;
    }
    // $ANTLR end "definicja_stalej"

    public static class stala_return extends TreeRuleReturnScope {
        public String constant;
        public boolean isIdent;
        public int typ;
        public StringTemplate st;
        public Object getTemplate() { return st; }
        public String toString() { return st==null?null:st.toString(); }
    };

    // $ANTLR start "stala"
    // /home/ravn/Workspace/pascal4j/src/pascalWalker.g:214:1: stala returns [String constant, boolean isIdent, int typ] : ( NUM_INT -> przekaz(item=$NUM_INT.text) | NUM_REAL -> przekaz(item=$NUM_REAL.text) | ^( PLUS val= ( NUM_INT | NUM_REAL | IDENT ) ) -> przekaz(item=$val.text) | ^( MINUS val= ( NUM_INT | NUM_REAL | IDENT ) ) -> przekaz(item=\"-\".concat($val.text)) | IDENT -> przekaz(item=$IDENT.text) | STRING_LITERAL -> przekaz(item=$STRING_LITERAL.text.substring(1,$STRING_LITERAL.text.length()-1)));
    public final pascalWalker.stala_return stala() throws RecognitionException {
        pascalWalker.stala_return retval = new pascalWalker.stala_return();
        retval.start = input.LT(1);

        CommonTree val=null;
        CommonTree NUM_INT6=null;
        CommonTree NUM_REAL7=null;
        CommonTree IDENT8=null;
        CommonTree STRING_LITERAL9=null;

        try {
            // /home/ravn/Workspace/pascal4j/src/pascalWalker.g:215:5: ( NUM_INT -> przekaz(item=$NUM_INT.text) | NUM_REAL -> przekaz(item=$NUM_REAL.text) | ^( PLUS val= ( NUM_INT | NUM_REAL | IDENT ) ) -> przekaz(item=$val.text) | ^( MINUS val= ( NUM_INT | NUM_REAL | IDENT ) ) -> przekaz(item=\"-\".concat($val.text)) | IDENT -> przekaz(item=$IDENT.text) | STRING_LITERAL -> przekaz(item=$STRING_LITERAL.text.substring(1,$STRING_LITERAL.text.length()-1)))
            int alt9=6;
            switch ( input.LA(1) ) {
            case NUM_INT:
                {
                alt9=1;
                }
                break;
            case NUM_REAL:
                {
                alt9=2;
                }
                break;
            case PLUS:
                {
                alt9=3;
                }
                break;
            case MINUS:
                {
                alt9=4;
                }
                break;
            case IDENT:
                {
                alt9=5;
                }
                break;
            case STRING_LITERAL:
                {
                alt9=6;
                }
                break;
            default:
                NoViableAltException nvae =
                    new NoViableAltException("", 9, 0, input);

                throw nvae;
            }

            switch (alt9) {
                case 1 :
                    // /home/ravn/Workspace/pascal4j/src/pascalWalker.g:215:7: NUM_INT
                    {
                    NUM_INT6=(CommonTree)match(input,NUM_INT,FOLLOW_NUM_INT_in_stala594); 
                     retval.constant =(NUM_INT6!=null?NUM_INT6.getText():null); retval.isIdent =false; retval.typ =1; 


                    // TEMPLATE REWRITE
                    // 215:68: -> przekaz(item=$NUM_INT.text)
                    {
                        retval.st = templateLib.getInstanceOf("przekaz",
                      new STAttrMap().put("item", (NUM_INT6!=null?NUM_INT6.getText():null)));
                    }


                    }
                    break;
                case 2 :
                    // /home/ravn/Workspace/pascal4j/src/pascalWalker.g:216:7: NUM_REAL
                    {
                    NUM_REAL7=(CommonTree)match(input,NUM_REAL,FOLLOW_NUM_REAL_in_stala613); 
                     retval.constant =(NUM_REAL7!=null?NUM_REAL7.getText():null); retval.isIdent =false; retval.typ =2; 


                    // TEMPLATE REWRITE
                    // 216:70: -> przekaz(item=$NUM_REAL.text)
                    {
                        retval.st = templateLib.getInstanceOf("przekaz",
                      new STAttrMap().put("item", (NUM_REAL7!=null?NUM_REAL7.getText():null)));
                    }


                    }
                    break;
                case 3 :
                    // /home/ravn/Workspace/pascal4j/src/pascalWalker.g:217:7: ^( PLUS val= ( NUM_INT | NUM_REAL | IDENT ) )
                    {
                    match(input,PLUS,FOLLOW_PLUS_in_stala634); 

                    match(input, Token.DOWN, null); 
                    // /home/ravn/Workspace/pascal4j/src/pascalWalker.g:218:14: ( NUM_INT | NUM_REAL | IDENT )
                    int alt7=3;
                    switch ( input.LA(1) ) {
                    case NUM_INT:
                        {
                        alt7=1;
                        }
                        break;
                    case NUM_REAL:
                        {
                        alt7=2;
                        }
                        break;
                    case IDENT:
                        {
                        alt7=3;
                        }
                        break;
                    default:
                        NoViableAltException nvae =
                            new NoViableAltException("", 7, 0, input);

                        throw nvae;
                    }

                    switch (alt7) {
                        case 1 :
                            // /home/ravn/Workspace/pascal4j/src/pascalWalker.g:218:16: NUM_INT
                            {
                            match(input,NUM_INT,FOLLOW_NUM_INT_in_stala649); 

                            }
                            break;
                        case 2 :
                            // /home/ravn/Workspace/pascal4j/src/pascalWalker.g:219:12: NUM_REAL
                            {
                            match(input,NUM_REAL,FOLLOW_NUM_REAL_in_stala662); 

                            }
                            break;
                        case 3 :
                            // /home/ravn/Workspace/pascal4j/src/pascalWalker.g:220:12: IDENT
                            {
                            match(input,IDENT,FOLLOW_IDENT_in_stala675); 

                            }
                            break;

                    }


                    match(input, Token.UP, null); 
                     retval.constant =(val!=null?val.getText():null); retval.isIdent =false; retval.typ =1; 


                    // TEMPLATE REWRITE
                    // 222:59: -> przekaz(item=$val.text)
                    {
                        retval.st = templateLib.getInstanceOf("przekaz",
                      new STAttrMap().put("item", (val!=null?val.getText():null)));
                    }


                    }
                    break;
                case 4 :
                    // /home/ravn/Workspace/pascal4j/src/pascalWalker.g:223:7: ^( MINUS val= ( NUM_INT | NUM_REAL | IDENT ) )
                    {
                    match(input,MINUS,FOLLOW_MINUS_in_stala716); 

                    match(input, Token.DOWN, null); 
                    // /home/ravn/Workspace/pascal4j/src/pascalWalker.g:224:14: ( NUM_INT | NUM_REAL | IDENT )
                    int alt8=3;
                    switch ( input.LA(1) ) {
                    case NUM_INT:
                        {
                        alt8=1;
                        }
                        break;
                    case NUM_REAL:
                        {
                        alt8=2;
                        }
                        break;
                    case IDENT:
                        {
                        alt8=3;
                        }
                        break;
                    default:
                        NoViableAltException nvae =
                            new NoViableAltException("", 8, 0, input);

                        throw nvae;
                    }

                    switch (alt8) {
                        case 1 :
                            // /home/ravn/Workspace/pascal4j/src/pascalWalker.g:224:16: NUM_INT
                            {
                            match(input,NUM_INT,FOLLOW_NUM_INT_in_stala731); 

                            }
                            break;
                        case 2 :
                            // /home/ravn/Workspace/pascal4j/src/pascalWalker.g:225:12: NUM_REAL
                            {
                            match(input,NUM_REAL,FOLLOW_NUM_REAL_in_stala744); 

                            }
                            break;
                        case 3 :
                            // /home/ravn/Workspace/pascal4j/src/pascalWalker.g:226:12: IDENT
                            {
                            match(input,IDENT,FOLLOW_IDENT_in_stala757); 

                            }
                            break;

                    }


                    match(input, Token.UP, null); 
                     retval.constant ="-".concat((val!=null?val.getText():null)); retval.isIdent =false; retval.typ =1; 


                    // TEMPLATE REWRITE
                    // 228:72: -> przekaz(item=\"-\".concat($val.text))
                    {
                        retval.st = templateLib.getInstanceOf("przekaz",
                      new STAttrMap().put("item", "-".concat((val!=null?val.getText():null))));
                    }


                    }
                    break;
                case 5 :
                    // /home/ravn/Workspace/pascal4j/src/pascalWalker.g:229:7: IDENT
                    {
                    IDENT8=(CommonTree)match(input,IDENT,FOLLOW_IDENT_in_stala797); 
                     retval.constant =(IDENT8!=null?IDENT8.getText():null); retval.isIdent =true; 


                    // TEMPLATE REWRITE
                    // 229:55: -> przekaz(item=$IDENT.text)
                    {
                        retval.st = templateLib.getInstanceOf("przekaz",
                      new STAttrMap().put("item", (IDENT8!=null?IDENT8.getText():null)));
                    }


                    }
                    break;
                case 6 :
                    // /home/ravn/Workspace/pascal4j/src/pascalWalker.g:230:7: STRING_LITERAL
                    {
                    STRING_LITERAL9=(CommonTree)match(input,STRING_LITERAL,FOLLOW_STRING_LITERAL_in_stala816); 
                     retval.constant =(STRING_LITERAL9!=null?STRING_LITERAL9.getText():null).substring(1,(STRING_LITERAL9!=null?STRING_LITERAL9.getText():null).length()-1); retval.isIdent =false; retval.typ =3; 


                    // TEMPLATE REWRITE
                    // 230:127: -> przekaz(item=$STRING_LITERAL.text.substring(1,$STRING_LITERAL.text.length()-1))
                    {
                        retval.st = templateLib.getInstanceOf("przekaz",
                      new STAttrMap().put("item", (STRING_LITERAL9!=null?STRING_LITERAL9.getText():null).substring(1,(STRING_LITERAL9!=null?STRING_LITERAL9.getText():null).length()-1)));
                    }


                    }
                    break;

            }
        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
        }
        finally {
        }
        return retval;
    }
    // $ANTLR end "stala"

    public static class napis_return extends TreeRuleReturnScope {
        public StringTemplate st;
        public Object getTemplate() { return st; }
        public String toString() { return st==null?null:st.toString(); }
    };

    // $ANTLR start "napis"
    // /home/ravn/Workspace/pascal4j/src/pascalWalker.g:233:1: napis : STRING_LITERAL -> napis(text=$STRING_LITERAL.text.substring(1,$STRING_LITERAL.text.length()-1));
    public final pascalWalker.napis_return napis() throws RecognitionException {
        pascalWalker.napis_return retval = new pascalWalker.napis_return();
        retval.start = input.LT(1);

        CommonTree STRING_LITERAL10=null;

        try {
            // /home/ravn/Workspace/pascal4j/src/pascalWalker.g:234:5: ( STRING_LITERAL -> napis(text=$STRING_LITERAL.text.substring(1,$STRING_LITERAL.text.length()-1)))
            // /home/ravn/Workspace/pascal4j/src/pascalWalker.g:234:7: STRING_LITERAL
            {
            STRING_LITERAL10=(CommonTree)match(input,STRING_LITERAL,FOLLOW_STRING_LITERAL_in_napis844); 


            // TEMPLATE REWRITE
            // 234:22: -> napis(text=$STRING_LITERAL.text.substring(1,$STRING_LITERAL.text.length()-1))
            {
                retval.st = templateLib.getInstanceOf("napis",
              new STAttrMap().put("text", (STRING_LITERAL10!=null?STRING_LITERAL10.getText():null).substring(1,(STRING_LITERAL10!=null?STRING_LITERAL10.getText():null).length()-1)));
            }


            }

        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
        }
        finally {
        }
        return retval;
    }
    // $ANTLR end "napis"

    public static class czesc_definiujaca_typy_return extends TreeRuleReturnScope {
        public StringTemplate st;
        public Object getTemplate() { return st; }
        public String toString() { return st==null?null:st.toString(); }
    };

    // $ANTLR start "czesc_definiujaca_typy"
    // /home/ravn/Workspace/pascal4j/src/pascalWalker.g:237:1: czesc_definiujaca_typy[boolean glowny] : ^( TYPE (types+= definicja_typu )+ ) -> typy(types=$types);
    public final pascalWalker.czesc_definiujaca_typy_return czesc_definiujaca_typy(boolean glowny) throws RecognitionException {
        pascalWalker.czesc_definiujaca_typy_return retval = new pascalWalker.czesc_definiujaca_typy_return();
        retval.start = input.LT(1);

        List list_types=null;
        pascalWalker.definicja_typu_return types = null;
         types = null;
        try {
            // /home/ravn/Workspace/pascal4j/src/pascalWalker.g:238:5: ( ^( TYPE (types+= definicja_typu )+ ) -> typy(types=$types))
            // /home/ravn/Workspace/pascal4j/src/pascalWalker.g:238:7: ^( TYPE (types+= definicja_typu )+ )
            {
            match(input,TYPE,FOLLOW_TYPE_in_czesc_definiujaca_typy872); 

            match(input, Token.DOWN, null); 
            // /home/ravn/Workspace/pascal4j/src/pascalWalker.g:238:19: (types+= definicja_typu )+
            int cnt10=0;
            loop10:
            do {
                int alt10=2;
                int LA10_0 = input.LA(1);

                if ( (LA10_0==TYPEDECL) ) {
                    alt10=1;
                }


                switch (alt10) {
            	case 1 :
            	    // /home/ravn/Workspace/pascal4j/src/pascalWalker.g:238:19: types+= definicja_typu
            	    {
            	    pushFollow(FOLLOW_definicja_typu_in_czesc_definiujaca_typy876);
            	    types=definicja_typu();

            	    state._fsp--;

            	    if (list_types==null) list_types=new ArrayList();
            	    list_types.add(types.getTemplate());


            	    }
            	    break;

            	default :
            	    if ( cnt10 >= 1 ) break loop10;
                        EarlyExitException eee =
                            new EarlyExitException(10, input);
                        throw eee;
                }
                cnt10++;
            } while (true);


            match(input, Token.UP, null); 
             
                	if(!glowny) {
                		System.out.println("Nie mozna definiowac typu w zagniezdzonych blokach (np. w procedurach)");
                		System.exit(1);
                	} 


            // TEMPLATE REWRITE
            // 242:10: -> typy(types=$types)
            {
                retval.st = templateLib.getInstanceOf("typy",
              new STAttrMap().put("types", list_types));
            }


            }

        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
        }
        finally {
        }
        return retval;
    }
    // $ANTLR end "czesc_definiujaca_typy"

    public static class definicja_typu_return extends TreeRuleReturnScope {
        public StringTemplate st;
        public Object getTemplate() { return st; }
        public String toString() { return st==null?null:st.toString(); }
    };

    // $ANTLR start "definicja_typu"
    // /home/ravn/Workspace/pascal4j/src/pascalWalker.g:245:1: definicja_typu : ^( TYPEDECL IDENT nowy_typ ) -> defTypu(id=$IDENT.texttyp=$nowy_typ.st);
    public final pascalWalker.definicja_typu_return definicja_typu() throws RecognitionException {
        pascalWalker.definicja_typu_return retval = new pascalWalker.definicja_typu_return();
        retval.start = input.LT(1);

        CommonTree IDENT11=null;
        pascalWalker.nowy_typ_return nowy_typ12 = null;


        try {
            // /home/ravn/Workspace/pascal4j/src/pascalWalker.g:246:5: ( ^( TYPEDECL IDENT nowy_typ ) -> defTypu(id=$IDENT.texttyp=$nowy_typ.st))
            // /home/ravn/Workspace/pascal4j/src/pascalWalker.g:246:7: ^( TYPEDECL IDENT nowy_typ )
            {
            match(input,TYPEDECL,FOLLOW_TYPEDECL_in_definicja_typu907); 

            match(input, Token.DOWN, null); 
            IDENT11=(CommonTree)match(input,IDENT,FOLLOW_IDENT_in_definicja_typu909); 
            pushFollow(FOLLOW_nowy_typ_in_definicja_typu911);
            nowy_typ12=nowy_typ();

            state._fsp--;


            match(input, Token.UP, null); 

                		//System.out.println("typ: "+(IDENT11!=null?IDENT11.getText():null));
                		Symbol newSymbol=new Symbol((IDENT11!=null?IDENT11.getText():null),"typ");
                		if(((PScope_scope)PScope_stack.peek()).symbols.contains(newSymbol)) {
                			System.err.println("Typ "+newSymbol.name+" zostal juz wczesniej zdefiniowany.");
                			System.exit(1);
                		}
                		((PScope_scope)PScope_stack.peek()).symbols.add(newSymbol);
                


            // TEMPLATE REWRITE
            // 254:7: -> defTypu(id=$IDENT.texttyp=$nowy_typ.st)
            {
                retval.st = templateLib.getInstanceOf("defTypu",
              new STAttrMap().put("id", (IDENT11!=null?IDENT11.getText():null)).put("typ", (nowy_typ12!=null?nowy_typ12.st:null)));
            }


            }

        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
        }
        finally {
        }
        return retval;
    }
    // $ANTLR end "definicja_typu"

    public static class nowy_typ_return extends TreeRuleReturnScope {
        public int typ;
        public StringTemplate st;
        public Object getTemplate() { return st; }
        public String toString() { return st==null?null:st.toString(); }
    };

    // $ANTLR start "nowy_typ"
    // /home/ravn/Workspace/pascal4j/src/pascalWalker.g:257:1: nowy_typ returns [int typ] : ( ^( SCALARTYPE lista_identyfikatorow[0,false] ) -> typWyliczeniowy(ids=$lista_identyfikatorow.st) | ^( DWIEKROPKI a= stala b= stala ) -> typOkrojony(start=$a.constantend=$b.constant) | identyfikator_typu -> przekaz(item=$identyfikator_typu.st) | nowy_typ_strukturalny -> przekaz(item=$nowy_typ_strukturalny.st) | ^( WSKAZNIK identyfikator_typu ) -> przekaz(item=$identyfikator_typu.st));
    public final pascalWalker.nowy_typ_return nowy_typ() throws RecognitionException {
        pascalWalker.nowy_typ_return retval = new pascalWalker.nowy_typ_return();
        retval.start = input.LT(1);

        pascalWalker.stala_return a = null;

        pascalWalker.stala_return b = null;

        pascalWalker.lista_identyfikatorow_return lista_identyfikatorow13 = null;

        pascalWalker.identyfikator_typu_return identyfikator_typu14 = null;

        pascalWalker.nowy_typ_strukturalny_return nowy_typ_strukturalny15 = null;

        pascalWalker.identyfikator_typu_return identyfikator_typu16 = null;


        try {
            // /home/ravn/Workspace/pascal4j/src/pascalWalker.g:258:5: ( ^( SCALARTYPE lista_identyfikatorow[0,false] ) -> typWyliczeniowy(ids=$lista_identyfikatorow.st) | ^( DWIEKROPKI a= stala b= stala ) -> typOkrojony(start=$a.constantend=$b.constant) | identyfikator_typu -> przekaz(item=$identyfikator_typu.st) | nowy_typ_strukturalny -> przekaz(item=$nowy_typ_strukturalny.st) | ^( WSKAZNIK identyfikator_typu ) -> przekaz(item=$identyfikator_typu.st))
            int alt11=5;
            switch ( input.LA(1) ) {
            case SCALARTYPE:
                {
                alt11=1;
                }
                break;
            case DWIEKROPKI:
                {
                alt11=2;
                }
                break;
            case IDENT:
            case CHAR:
            case BOOLEAN:
            case INTEGER:
            case REAL:
            case STRING:
                {
                alt11=3;
                }
                break;
            case PACKED:
            case ARRAY:
            case RECORD:
                {
                alt11=4;
                }
                break;
            case WSKAZNIK:
                {
                alt11=5;
                }
                break;
            default:
                NoViableAltException nvae =
                    new NoViableAltException("", 11, 0, input);

                throw nvae;
            }

            switch (alt11) {
                case 1 :
                    // /home/ravn/Workspace/pascal4j/src/pascalWalker.g:258:7: ^( SCALARTYPE lista_identyfikatorow[0,false] )
                    {
                    match(input,SCALARTYPE,FOLLOW_SCALARTYPE_in_nowy_typ949); 

                    match(input, Token.DOWN, null); 
                    pushFollow(FOLLOW_lista_identyfikatorow_in_nowy_typ951);
                    lista_identyfikatorow13=lista_identyfikatorow(0, false);

                    state._fsp--;


                    match(input, Token.UP, null); 
                    retval.typ =4;


                    // TEMPLATE REWRITE
                    // 258:61: -> typWyliczeniowy(ids=$lista_identyfikatorow.st)
                    {
                        retval.st = templateLib.getInstanceOf("typWyliczeniowy",
                      new STAttrMap().put("ids", (lista_identyfikatorow13!=null?lista_identyfikatorow13.st:null)));
                    }


                    }
                    break;
                case 2 :
                    // /home/ravn/Workspace/pascal4j/src/pascalWalker.g:259:7: ^( DWIEKROPKI a= stala b= stala )
                    {
                    match(input,DWIEKROPKI,FOLLOW_DWIEKROPKI_in_nowy_typ972); 

                    match(input, Token.DOWN, null); 
                    pushFollow(FOLLOW_stala_in_nowy_typ976);
                    a=stala();

                    state._fsp--;

                    pushFollow(FOLLOW_stala_in_nowy_typ980);
                    b=stala();

                    state._fsp--;


                    match(input, Token.UP, null); 
                    retval.typ =1;


                    // TEMPLATE REWRITE
                    // 259:47: -> typOkrojony(start=$a.constantend=$b.constant)
                    {
                        retval.st = templateLib.getInstanceOf("typOkrojony",
                      new STAttrMap().put("start", (a!=null?a.constant:null)).put("end", (b!=null?b.constant:null)));
                    }


                    }
                    break;
                case 3 :
                    // /home/ravn/Workspace/pascal4j/src/pascalWalker.g:260:7: identyfikator_typu
                    {
                    pushFollow(FOLLOW_identyfikator_typu_in_nowy_typ1004);
                    identyfikator_typu14=identyfikator_typu();

                    state._fsp--;

                    retval.typ =(identyfikator_typu14!=null?identyfikator_typu14.typ:0); 


                    // TEMPLATE REWRITE
                    // 260:58: -> przekaz(item=$identyfikator_typu.st)
                    {
                        retval.st = templateLib.getInstanceOf("przekaz",
                      new STAttrMap().put("item", (identyfikator_typu14!=null?identyfikator_typu14.st:null)));
                    }


                    }
                    break;
                case 4 :
                    // /home/ravn/Workspace/pascal4j/src/pascalWalker.g:261:7: nowy_typ_strukturalny
                    {
                    pushFollow(FOLLOW_nowy_typ_strukturalny_in_nowy_typ1022);
                    nowy_typ_strukturalny15=nowy_typ_strukturalny();

                    state._fsp--;

                    retval.typ =5;


                    // TEMPLATE REWRITE
                    // 261:38: -> przekaz(item=$nowy_typ_strukturalny.st)
                    {
                        retval.st = templateLib.getInstanceOf("przekaz",
                      new STAttrMap().put("item", (nowy_typ_strukturalny15!=null?nowy_typ_strukturalny15.st:null)));
                    }


                    }
                    break;
                case 5 :
                    // /home/ravn/Workspace/pascal4j/src/pascalWalker.g:262:7: ^( WSKAZNIK identyfikator_typu )
                    {
                    match(input,WSKAZNIK,FOLLOW_WSKAZNIK_in_nowy_typ1041); 

                    match(input, Token.DOWN, null); 
                    pushFollow(FOLLOW_identyfikator_typu_in_nowy_typ1043);
                    identyfikator_typu16=identyfikator_typu();

                    state._fsp--;


                    match(input, Token.UP, null); 
                    retval.typ =(identyfikator_typu16!=null?identyfikator_typu16.typ:0);


                    // TEMPLATE REWRITE
                    // 262:70: -> przekaz(item=$identyfikator_typu.st)
                    {
                        retval.st = templateLib.getInstanceOf("przekaz",
                      new STAttrMap().put("item", (identyfikator_typu16!=null?identyfikator_typu16.st:null)));
                    }


                    }
                    break;

            }
        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
        }
        finally {
        }
        return retval;
    }
    // $ANTLR end "nowy_typ"

    public static class identyfikator_typu_return extends TreeRuleReturnScope {
        public int typ;
        public StringTemplate st;
        public Object getTemplate() { return st; }
        public String toString() { return st==null?null:st.toString(); }
    };

    // $ANTLR start "identyfikator_typu"
    // /home/ravn/Workspace/pascal4j/src/pascalWalker.g:265:1: identyfikator_typu returns [int typ] : ( IDENT -> przekaz(item=$IDENT.text) | CHAR -> przekaz(item=\"char\") | BOOLEAN -> przekaz(item=\"boolean\") | INTEGER -> przekaz(item=\"int\") | REAL -> przekaz(item=\"float\") | ^( STRING ( IDENT | NUM_INT | NUM_REAL | ) ) -> przekaz(item=\"java/lang/String\"));
    public final pascalWalker.identyfikator_typu_return identyfikator_typu() throws RecognitionException {
        pascalWalker.identyfikator_typu_return retval = new pascalWalker.identyfikator_typu_return();
        retval.start = input.LT(1);

        CommonTree IDENT17=null;

        try {
            // /home/ravn/Workspace/pascal4j/src/pascalWalker.g:266:5: ( IDENT -> przekaz(item=$IDENT.text) | CHAR -> przekaz(item=\"char\") | BOOLEAN -> przekaz(item=\"boolean\") | INTEGER -> przekaz(item=\"int\") | REAL -> przekaz(item=\"float\") | ^( STRING ( IDENT | NUM_INT | NUM_REAL | ) ) -> przekaz(item=\"java/lang/String\"))
            int alt13=6;
            switch ( input.LA(1) ) {
            case IDENT:
                {
                alt13=1;
                }
                break;
            case CHAR:
                {
                alt13=2;
                }
                break;
            case BOOLEAN:
                {
                alt13=3;
                }
                break;
            case INTEGER:
                {
                alt13=4;
                }
                break;
            case REAL:
                {
                alt13=5;
                }
                break;
            case STRING:
                {
                alt13=6;
                }
                break;
            default:
                NoViableAltException nvae =
                    new NoViableAltException("", 13, 0, input);

                throw nvae;
            }

            switch (alt13) {
                case 1 :
                    // /home/ravn/Workspace/pascal4j/src/pascalWalker.g:266:7: IDENT
                    {
                    IDENT17=(CommonTree)match(input,IDENT,FOLLOW_IDENT_in_identyfikator_typu1076); 
                     // sprawdzac w tablicy symboli czy nie? 
                        	retval.typ =6;
                        


                    // TEMPLATE REWRITE
                    // 268:7: -> przekaz(item=$IDENT.text)
                    {
                        retval.st = templateLib.getInstanceOf("przekaz",
                      new STAttrMap().put("item", (IDENT17!=null?IDENT17.getText():null)));
                    }


                    }
                    break;
                case 2 :
                    // /home/ravn/Workspace/pascal4j/src/pascalWalker.g:269:7: CHAR
                    {
                    match(input,CHAR,FOLLOW_CHAR_in_identyfikator_typu1095); 
                     retval.typ =7; 


                    // TEMPLATE REWRITE
                    // 269:23: -> przekaz(item=\"char\")
                    {
                        retval.st = templateLib.getInstanceOf("przekaz",
                      new STAttrMap().put("item", "char"));
                    }


                    }
                    break;
                case 3 :
                    // /home/ravn/Workspace/pascal4j/src/pascalWalker.g:270:7: BOOLEAN
                    {
                    match(input,BOOLEAN,FOLLOW_BOOLEAN_in_identyfikator_typu1113); 
                     retval.typ =1; 


                    // TEMPLATE REWRITE
                    // 270:27: -> przekaz(item=\"boolean\")
                    {
                        retval.st = templateLib.getInstanceOf("przekaz",
                      new STAttrMap().put("item", "boolean"));
                    }


                    }
                    break;
                case 4 :
                    // /home/ravn/Workspace/pascal4j/src/pascalWalker.g:271:7: INTEGER
                    {
                    match(input,INTEGER,FOLLOW_INTEGER_in_identyfikator_typu1132); 
                     retval.typ =1; 


                    // TEMPLATE REWRITE
                    // 271:27: -> przekaz(item=\"int\")
                    {
                        retval.st = templateLib.getInstanceOf("przekaz",
                      new STAttrMap().put("item", "int"));
                    }


                    }
                    break;
                case 5 :
                    // /home/ravn/Workspace/pascal4j/src/pascalWalker.g:272:7: REAL
                    {
                    match(input,REAL,FOLLOW_REAL_in_identyfikator_typu1151); 
                     retval.typ =2; 


                    // TEMPLATE REWRITE
                    // 272:24: -> przekaz(item=\"float\")
                    {
                        retval.st = templateLib.getInstanceOf("przekaz",
                      new STAttrMap().put("item", "float"));
                    }


                    }
                    break;
                case 6 :
                    // /home/ravn/Workspace/pascal4j/src/pascalWalker.g:273:7: ^( STRING ( IDENT | NUM_INT | NUM_REAL | ) )
                    {
                    match(input,STRING,FOLLOW_STRING_in_identyfikator_typu1172); 

                    if ( input.LA(1)==Token.DOWN ) {
                        match(input, Token.DOWN, null); 
                        // /home/ravn/Workspace/pascal4j/src/pascalWalker.g:274:10: ( IDENT | NUM_INT | NUM_REAL | )
                        int alt12=4;
                        switch ( input.LA(1) ) {
                        case IDENT:
                            {
                            alt12=1;
                            }
                            break;
                        case NUM_INT:
                            {
                            alt12=2;
                            }
                            break;
                        case NUM_REAL:
                            {
                            alt12=3;
                            }
                            break;
                        case UP:
                            {
                            alt12=4;
                            }
                            break;
                        default:
                            NoViableAltException nvae =
                                new NoViableAltException("", 12, 0, input);

                            throw nvae;
                        }

                        switch (alt12) {
                            case 1 :
                                // /home/ravn/Workspace/pascal4j/src/pascalWalker.g:274:12: IDENT
                                {
                                match(input,IDENT,FOLLOW_IDENT_in_identyfikator_typu1185); 

                                }
                                break;
                            case 2 :
                                // /home/ravn/Workspace/pascal4j/src/pascalWalker.g:275:12: NUM_INT
                                {
                                match(input,NUM_INT,FOLLOW_NUM_INT_in_identyfikator_typu1198); 

                                }
                                break;
                            case 3 :
                                // /home/ravn/Workspace/pascal4j/src/pascalWalker.g:276:12: NUM_REAL
                                {
                                match(input,NUM_REAL,FOLLOW_NUM_REAL_in_identyfikator_typu1211); 

                                }
                                break;
                            case 4 :
                                // /home/ravn/Workspace/pascal4j/src/pascalWalker.g:278:10: 
                                {
                                }
                                break;

                        }


                        match(input, Token.UP, null); 
                    }
                     retval.typ =3; 


                    // TEMPLATE REWRITE
                    // 279:22: -> przekaz(item=\"java/lang/String\")
                    {
                        retval.st = templateLib.getInstanceOf("przekaz",
                      new STAttrMap().put("item", "java/lang/String"));
                    }


                    }
                    break;

            }
        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
        }
        finally {
        }
        return retval;
    }
    // $ANTLR end "identyfikator_typu"

    public static class nowy_typ_strukturalny_return extends TreeRuleReturnScope {
        public StringTemplate st;
        public Object getTemplate() { return st; }
        public String toString() { return st==null?null:st.toString(); }
    };

    // $ANTLR start "nowy_typ_strukturalny"
    // /home/ravn/Workspace/pascal4j/src/pascalWalker.g:282:1: nowy_typ_strukturalny : ( ^( PACKED typ_strukturalny_niespakowany ) -> przekaz(item=$typ_strukturalny_niespakowany.st) | typ_strukturalny_niespakowany -> przekaz(item=$typ_strukturalny_niespakowany.st));
    public final pascalWalker.nowy_typ_strukturalny_return nowy_typ_strukturalny() throws RecognitionException {
        pascalWalker.nowy_typ_strukturalny_return retval = new pascalWalker.nowy_typ_strukturalny_return();
        retval.start = input.LT(1);

        pascalWalker.typ_strukturalny_niespakowany_return typ_strukturalny_niespakowany18 = null;

        pascalWalker.typ_strukturalny_niespakowany_return typ_strukturalny_niespakowany19 = null;


        try {
            // /home/ravn/Workspace/pascal4j/src/pascalWalker.g:283:5: ( ^( PACKED typ_strukturalny_niespakowany ) -> przekaz(item=$typ_strukturalny_niespakowany.st) | typ_strukturalny_niespakowany -> przekaz(item=$typ_strukturalny_niespakowany.st))
            int alt14=2;
            int LA14_0 = input.LA(1);

            if ( (LA14_0==PACKED) ) {
                alt14=1;
            }
            else if ( (LA14_0==ARRAY||LA14_0==RECORD) ) {
                alt14=2;
            }
            else {
                NoViableAltException nvae =
                    new NoViableAltException("", 14, 0, input);

                throw nvae;
            }
            switch (alt14) {
                case 1 :
                    // /home/ravn/Workspace/pascal4j/src/pascalWalker.g:283:7: ^( PACKED typ_strukturalny_niespakowany )
                    {
                    match(input,PACKED,FOLLOW_PACKED_in_nowy_typ_strukturalny1271); 

                    match(input, Token.DOWN, null); 
                    pushFollow(FOLLOW_typ_strukturalny_niespakowany_in_nowy_typ_strukturalny1273);
                    typ_strukturalny_niespakowany18=typ_strukturalny_niespakowany();

                    state._fsp--;


                    match(input, Token.UP, null); 


                    // TEMPLATE REWRITE
                    // 283:47: -> przekaz(item=$typ_strukturalny_niespakowany.st)
                    {
                        retval.st = templateLib.getInstanceOf("przekaz",
                      new STAttrMap().put("item", (typ_strukturalny_niespakowany18!=null?typ_strukturalny_niespakowany18.st:null)));
                    }


                    }
                    break;
                case 2 :
                    // /home/ravn/Workspace/pascal4j/src/pascalWalker.g:284:7: typ_strukturalny_niespakowany
                    {
                    pushFollow(FOLLOW_typ_strukturalny_niespakowany_in_nowy_typ_strukturalny1291);
                    typ_strukturalny_niespakowany19=typ_strukturalny_niespakowany();

                    state._fsp--;



                    // TEMPLATE REWRITE
                    // 284:37: -> przekaz(item=$typ_strukturalny_niespakowany.st)
                    {
                        retval.st = templateLib.getInstanceOf("przekaz",
                      new STAttrMap().put("item", (typ_strukturalny_niespakowany19!=null?typ_strukturalny_niespakowany19.st:null)));
                    }


                    }
                    break;

            }
        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
        }
        finally {
        }
        return retval;
    }
    // $ANTLR end "nowy_typ_strukturalny"

    public static class typ_strukturalny_niespakowany_return extends TreeRuleReturnScope {
        public StringTemplate st;
        public Object getTemplate() { return st; }
        public String toString() { return st==null?null:st.toString(); }
    };

    // $ANTLR start "typ_strukturalny_niespakowany"
    // /home/ravn/Workspace/pascal4j/src/pascalWalker.g:287:1: typ_strukturalny_niespakowany : ( typ_tablicowy -> przekaz(item=$typ_tablicowy.st) | typ_rekordowy -> przekaz(item=$typ_rekordowy.st));
    public final pascalWalker.typ_strukturalny_niespakowany_return typ_strukturalny_niespakowany() throws RecognitionException {
        pascalWalker.typ_strukturalny_niespakowany_return retval = new pascalWalker.typ_strukturalny_niespakowany_return();
        retval.start = input.LT(1);

        pascalWalker.typ_tablicowy_return typ_tablicowy20 = null;

        pascalWalker.typ_rekordowy_return typ_rekordowy21 = null;


        try {
            // /home/ravn/Workspace/pascal4j/src/pascalWalker.g:288:5: ( typ_tablicowy -> przekaz(item=$typ_tablicowy.st) | typ_rekordowy -> przekaz(item=$typ_rekordowy.st))
            int alt15=2;
            int LA15_0 = input.LA(1);

            if ( (LA15_0==ARRAY) ) {
                alt15=1;
            }
            else if ( (LA15_0==RECORD) ) {
                alt15=2;
            }
            else {
                NoViableAltException nvae =
                    new NoViableAltException("", 15, 0, input);

                throw nvae;
            }
            switch (alt15) {
                case 1 :
                    // /home/ravn/Workspace/pascal4j/src/pascalWalker.g:288:7: typ_tablicowy
                    {
                    pushFollow(FOLLOW_typ_tablicowy_in_typ_strukturalny_niespakowany1317);
                    typ_tablicowy20=typ_tablicowy();

                    state._fsp--;



                    // TEMPLATE REWRITE
                    // 288:21: -> przekaz(item=$typ_tablicowy.st)
                    {
                        retval.st = templateLib.getInstanceOf("przekaz",
                      new STAttrMap().put("item", (typ_tablicowy20!=null?typ_tablicowy20.st:null)));
                    }


                    }
                    break;
                case 2 :
                    // /home/ravn/Workspace/pascal4j/src/pascalWalker.g:289:7: typ_rekordowy
                    {
                    pushFollow(FOLLOW_typ_rekordowy_in_typ_strukturalny_niespakowany1334);
                    typ_rekordowy21=typ_rekordowy();

                    state._fsp--;



                    // TEMPLATE REWRITE
                    // 289:21: -> przekaz(item=$typ_rekordowy.st)
                    {
                        retval.st = templateLib.getInstanceOf("przekaz",
                      new STAttrMap().put("item", (typ_rekordowy21!=null?typ_rekordowy21.st:null)));
                    }


                    }
                    break;

            }
        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
        }
        finally {
        }
        return retval;
    }
    // $ANTLR end "typ_strukturalny_niespakowany"

    public static class typ_tablicowy_return extends TreeRuleReturnScope {
        public StringTemplate st;
        public Object getTemplate() { return st; }
        public String toString() { return st==null?null:st.toString(); }
    };

    // $ANTLR start "typ_tablicowy"
    // /home/ravn/Workspace/pascal4j/src/pascalWalker.g:292:1: typ_tablicowy : ^( ARRAY lista_typow_indeksowych nowy_typ ) -> typTablicowy(indexes=$lista_typow_indeksowych.sttyp=$nowy_typ.st);
    public final pascalWalker.typ_tablicowy_return typ_tablicowy() throws RecognitionException {
        pascalWalker.typ_tablicowy_return retval = new pascalWalker.typ_tablicowy_return();
        retval.start = input.LT(1);

        pascalWalker.lista_typow_indeksowych_return lista_typow_indeksowych22 = null;

        pascalWalker.nowy_typ_return nowy_typ23 = null;


        try {
            // /home/ravn/Workspace/pascal4j/src/pascalWalker.g:293:5: ( ^( ARRAY lista_typow_indeksowych nowy_typ ) -> typTablicowy(indexes=$lista_typow_indeksowych.sttyp=$nowy_typ.st))
            // /home/ravn/Workspace/pascal4j/src/pascalWalker.g:293:7: ^( ARRAY lista_typow_indeksowych nowy_typ )
            {
            match(input,ARRAY,FOLLOW_ARRAY_in_typ_tablicowy1361); 

            match(input, Token.DOWN, null); 
            pushFollow(FOLLOW_lista_typow_indeksowych_in_typ_tablicowy1363);
            lista_typow_indeksowych22=lista_typow_indeksowych();

            state._fsp--;

            pushFollow(FOLLOW_nowy_typ_in_typ_tablicowy1365);
            nowy_typ23=nowy_typ();

            state._fsp--;


            match(input, Token.UP, null); 


            // TEMPLATE REWRITE
            // 293:49: -> typTablicowy(indexes=$lista_typow_indeksowych.sttyp=$nowy_typ.st)
            {
                retval.st = templateLib.getInstanceOf("typTablicowy",
              new STAttrMap().put("indexes", (lista_typow_indeksowych22!=null?lista_typow_indeksowych22.st:null)).put("typ", (nowy_typ23!=null?nowy_typ23.st:null)));
            }


            }

        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
        }
        finally {
        }
        return retval;
    }
    // $ANTLR end "typ_tablicowy"

    public static class lista_typow_indeksowych_return extends TreeRuleReturnScope {
        public StringTemplate st;
        public Object getTemplate() { return st; }
        public String toString() { return st==null?null:st.toString(); }
    };

    // $ANTLR start "lista_typow_indeksowych"
    // /home/ravn/Workspace/pascal4j/src/pascalWalker.g:296:1: lista_typow_indeksowych : ^( TYPELIST (a+= nowy_typ )+ ) -> commaIdList(ids=$a);
    public final pascalWalker.lista_typow_indeksowych_return lista_typow_indeksowych() throws RecognitionException {
        pascalWalker.lista_typow_indeksowych_return retval = new pascalWalker.lista_typow_indeksowych_return();
        retval.start = input.LT(1);

        List list_a=null;
        pascalWalker.nowy_typ_return a = null;
         a = null;
        try {
            // /home/ravn/Workspace/pascal4j/src/pascalWalker.g:297:5: ( ^( TYPELIST (a+= nowy_typ )+ ) -> commaIdList(ids=$a))
            // /home/ravn/Workspace/pascal4j/src/pascalWalker.g:297:7: ^( TYPELIST (a+= nowy_typ )+ )
            {
            match(input,TYPELIST,FOLLOW_TYPELIST_in_lista_typow_indeksowych1398); 

            match(input, Token.DOWN, null); 
            // /home/ravn/Workspace/pascal4j/src/pascalWalker.g:297:20: (a+= nowy_typ )+
            int cnt16=0;
            loop16:
            do {
                int alt16=2;
                int LA16_0 = input.LA(1);

                if ( (LA16_0==SCALARTYPE||LA16_0==DWIEKROPKI||LA16_0==IDENT||(LA16_0>=CHAR && LA16_0<=ARRAY)||LA16_0==RECORD||LA16_0==WSKAZNIK) ) {
                    alt16=1;
                }


                switch (alt16) {
            	case 1 :
            	    // /home/ravn/Workspace/pascal4j/src/pascalWalker.g:297:20: a+= nowy_typ
            	    {
            	    pushFollow(FOLLOW_nowy_typ_in_lista_typow_indeksowych1402);
            	    a=nowy_typ();

            	    state._fsp--;

            	    if (list_a==null) list_a=new ArrayList();
            	    list_a.add(a.getTemplate());


            	    }
            	    break;

            	default :
            	    if ( cnt16 >= 1 ) break loop16;
                        EarlyExitException eee =
                            new EarlyExitException(16, input);
                        throw eee;
                }
                cnt16++;
            } while (true);


            match(input, Token.UP, null); 


            // TEMPLATE REWRITE
            // 297:34: -> commaIdList(ids=$a)
            {
                retval.st = templateLib.getInstanceOf("commaIdList",
              new STAttrMap().put("ids", list_a));
            }


            }

        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
        }
        finally {
        }
        return retval;
    }
    // $ANTLR end "lista_typow_indeksowych"

    public static class typ_rekordowy_return extends TreeRuleReturnScope {
        public StringTemplate st;
        public Object getTemplate() { return st; }
        public String toString() { return st==null?null:st.toString(); }
    };

    // $ANTLR start "typ_rekordowy"
    // /home/ravn/Workspace/pascal4j/src/pascalWalker.g:300:1: typ_rekordowy : ^( RECORD lista_pol ) -> typRekordowy(pola=$lista_pol.st);
    public final pascalWalker.typ_rekordowy_return typ_rekordowy() throws RecognitionException {
        pascalWalker.typ_rekordowy_return retval = new pascalWalker.typ_rekordowy_return();
        retval.start = input.LT(1);

        pascalWalker.lista_pol_return lista_pol24 = null;


        try {
            // /home/ravn/Workspace/pascal4j/src/pascalWalker.g:301:5: ( ^( RECORD lista_pol ) -> typRekordowy(pola=$lista_pol.st))
            // /home/ravn/Workspace/pascal4j/src/pascalWalker.g:301:7: ^( RECORD lista_pol )
            {
            match(input,RECORD,FOLLOW_RECORD_in_typ_rekordowy1432); 

            match(input, Token.DOWN, null); 
            pushFollow(FOLLOW_lista_pol_in_typ_rekordowy1434);
            lista_pol24=lista_pol();

            state._fsp--;


            match(input, Token.UP, null); 


            // TEMPLATE REWRITE
            // 301:27: -> typRekordowy(pola=$lista_pol.st)
            {
                retval.st = templateLib.getInstanceOf("typRekordowy",
              new STAttrMap().put("pola", (lista_pol24!=null?lista_pol24.st:null)));
            }


            }

        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
        }
        finally {
        }
        return retval;
    }
    // $ANTLR end "typ_rekordowy"

    public static class lista_pol_return extends TreeRuleReturnScope {
        public StringTemplate st;
        public Object getTemplate() { return st; }
        public String toString() { return st==null?null:st.toString(); }
    };

    // $ANTLR start "lista_pol"
    // /home/ravn/Workspace/pascal4j/src/pascalWalker.g:304:1: lista_pol : ^( FIELDLIST (a= czesc_stala (b= czesc_zmienna )? | b= czesc_zmienna ) ) -> listaPol(const=$a.stvar=$b.st);
    public final pascalWalker.lista_pol_return lista_pol() throws RecognitionException {
        pascalWalker.lista_pol_return retval = new pascalWalker.lista_pol_return();
        retval.start = input.LT(1);

        pascalWalker.czesc_stala_return a = null;

        pascalWalker.czesc_zmienna_return b = null;


        try {
            // /home/ravn/Workspace/pascal4j/src/pascalWalker.g:305:5: ( ^( FIELDLIST (a= czesc_stala (b= czesc_zmienna )? | b= czesc_zmienna ) ) -> listaPol(const=$a.stvar=$b.st))
            // /home/ravn/Workspace/pascal4j/src/pascalWalker.g:305:7: ^( FIELDLIST (a= czesc_stala (b= czesc_zmienna )? | b= czesc_zmienna ) )
            {
            match(input,FIELDLIST,FOLLOW_FIELDLIST_in_lista_pol1463); 

            match(input, Token.DOWN, null); 
            // /home/ravn/Workspace/pascal4j/src/pascalWalker.g:306:10: (a= czesc_stala (b= czesc_zmienna )? | b= czesc_zmienna )
            int alt18=2;
            int LA18_0 = input.LA(1);

            if ( (LA18_0==FIELD) ) {
                alt18=1;
            }
            else if ( (LA18_0==CASE) ) {
                alt18=2;
            }
            else {
                NoViableAltException nvae =
                    new NoViableAltException("", 18, 0, input);

                throw nvae;
            }
            switch (alt18) {
                case 1 :
                    // /home/ravn/Workspace/pascal4j/src/pascalWalker.g:306:12: a= czesc_stala (b= czesc_zmienna )?
                    {
                    pushFollow(FOLLOW_czesc_stala_in_lista_pol1478);
                    a=czesc_stala();

                    state._fsp--;

                    // /home/ravn/Workspace/pascal4j/src/pascalWalker.g:306:27: (b= czesc_zmienna )?
                    int alt17=2;
                    int LA17_0 = input.LA(1);

                    if ( (LA17_0==CASE) ) {
                        alt17=1;
                    }
                    switch (alt17) {
                        case 1 :
                            // /home/ravn/Workspace/pascal4j/src/pascalWalker.g:306:27: b= czesc_zmienna
                            {
                            pushFollow(FOLLOW_czesc_zmienna_in_lista_pol1482);
                            b=czesc_zmienna();

                            state._fsp--;


                            }
                            break;

                    }


                    }
                    break;
                case 2 :
                    // /home/ravn/Workspace/pascal4j/src/pascalWalker.g:307:12: b= czesc_zmienna
                    {
                    pushFollow(FOLLOW_czesc_zmienna_in_lista_pol1498);
                    b=czesc_zmienna();

                    state._fsp--;


                    }
                    break;

            }


            match(input, Token.UP, null); 


            // TEMPLATE REWRITE
            // 309:10: -> listaPol(const=$a.stvar=$b.st)
            {
                retval.st = templateLib.getInstanceOf("listaPol",
              new STAttrMap().put("const", (a!=null?a.st:null)).put("var", (b!=null?b.st:null)));
            }


            }

        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
        }
        finally {
        }
        return retval;
    }
    // $ANTLR end "lista_pol"

    public static class czesc_stala_return extends TreeRuleReturnScope {
        public StringTemplate st;
        public Object getTemplate() { return st; }
        public String toString() { return st==null?null:st.toString(); }
    };

    // $ANTLR start "czesc_stala"
    // /home/ravn/Workspace/pascal4j/src/pascalWalker.g:312:1: czesc_stala : (a+= sekcja_rekordu )+ -> sekcjeRekordu(el=$a);
    public final pascalWalker.czesc_stala_return czesc_stala() throws RecognitionException {
        pascalWalker.czesc_stala_return retval = new pascalWalker.czesc_stala_return();
        retval.start = input.LT(1);

        List list_a=null;
        pascalWalker.sekcja_rekordu_return a = null;
         a = null;
        try {
            // /home/ravn/Workspace/pascal4j/src/pascalWalker.g:313:5: ( (a+= sekcja_rekordu )+ -> sekcjeRekordu(el=$a))
            // /home/ravn/Workspace/pascal4j/src/pascalWalker.g:313:7: (a+= sekcja_rekordu )+
            {
            // /home/ravn/Workspace/pascal4j/src/pascalWalker.g:313:8: (a+= sekcja_rekordu )+
            int cnt19=0;
            loop19:
            do {
                int alt19=2;
                int LA19_0 = input.LA(1);

                if ( (LA19_0==FIELD) ) {
                    alt19=1;
                }


                switch (alt19) {
            	case 1 :
            	    // /home/ravn/Workspace/pascal4j/src/pascalWalker.g:313:8: a+= sekcja_rekordu
            	    {
            	    pushFollow(FOLLOW_sekcja_rekordu_in_czesc_stala1551);
            	    a=sekcja_rekordu();

            	    state._fsp--;

            	    if (list_a==null) list_a=new ArrayList();
            	    list_a.add(a.getTemplate());


            	    }
            	    break;

            	default :
            	    if ( cnt19 >= 1 ) break loop19;
                        EarlyExitException eee =
                            new EarlyExitException(19, input);
                        throw eee;
                }
                cnt19++;
            } while (true);



            // TEMPLATE REWRITE
            // 313:26: -> sekcjeRekordu(el=$a)
            {
                retval.st = templateLib.getInstanceOf("sekcjeRekordu",
              new STAttrMap().put("el", list_a));
            }


            }

        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
        }
        finally {
        }
        return retval;
    }
    // $ANTLR end "czesc_stala"

    public static class sekcja_rekordu_return extends TreeRuleReturnScope {
        public StringTemplate st;
        public Object getTemplate() { return st; }
        public String toString() { return st==null?null:st.toString(); }
    };

    // $ANTLR start "sekcja_rekordu"
    // /home/ravn/Workspace/pascal4j/src/pascalWalker.g:316:1: sekcja_rekordu : ^( FIELD nowy_typ lista_identyfikatorow[$nowy_typ.typ,false] ) -> sekcjaRekordu(ids=$lista_identyfikatorow.sttyp=$nowy_typ.st);
    public final pascalWalker.sekcja_rekordu_return sekcja_rekordu() throws RecognitionException {
        pascalWalker.sekcja_rekordu_return retval = new pascalWalker.sekcja_rekordu_return();
        retval.start = input.LT(1);

        pascalWalker.nowy_typ_return nowy_typ25 = null;

        pascalWalker.lista_identyfikatorow_return lista_identyfikatorow26 = null;


        try {
            // /home/ravn/Workspace/pascal4j/src/pascalWalker.g:318:7: ( ^( FIELD nowy_typ lista_identyfikatorow[$nowy_typ.typ,false] ) -> sekcjaRekordu(ids=$lista_identyfikatorow.sttyp=$nowy_typ.st))
            // /home/ravn/Workspace/pascal4j/src/pascalWalker.g:318:9: ^( FIELD nowy_typ lista_identyfikatorow[$nowy_typ.typ,false] )
            {
            match(input,FIELD,FOLLOW_FIELD_in_sekcja_rekordu1582); 

            match(input, Token.DOWN, null); 
            pushFollow(FOLLOW_nowy_typ_in_sekcja_rekordu1584);
            nowy_typ25=nowy_typ();

            state._fsp--;

            pushFollow(FOLLOW_lista_identyfikatorow_in_sekcja_rekordu1586);
            lista_identyfikatorow26=lista_identyfikatorow((nowy_typ25!=null?nowy_typ25.typ:0), false);

            state._fsp--;


            match(input, Token.UP, null); 


            // TEMPLATE REWRITE
            // 318:70: -> sekcjaRekordu(ids=$lista_identyfikatorow.sttyp=$nowy_typ.st)
            {
                retval.st = templateLib.getInstanceOf("sekcjaRekordu",
              new STAttrMap().put("ids", (lista_identyfikatorow26!=null?lista_identyfikatorow26.st:null)).put("typ", (nowy_typ25!=null?nowy_typ25.st:null)));
            }


            }

        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
        }
        finally {
        }
        return retval;
    }
    // $ANTLR end "sekcja_rekordu"

    public static class czesc_zmienna_return extends TreeRuleReturnScope {
        public StringTemplate st;
        public Object getTemplate() { return st; }
        public String toString() { return st==null?null:st.toString(); }
    };

    // $ANTLR start "czesc_zmienna"
    // /home/ravn/Workspace/pascal4j/src/pascalWalker.g:321:1: czesc_zmienna : ^( CASE a= selektor_wariantu (b+= wariant )+ ) -> czescZmiennaRekordu(selektor=$a.stwarianty=$b);
    public final pascalWalker.czesc_zmienna_return czesc_zmienna() throws RecognitionException {
        pascalWalker.czesc_zmienna_return retval = new pascalWalker.czesc_zmienna_return();
        retval.start = input.LT(1);

        List list_b=null;
        pascalWalker.selektor_wariantu_return a = null;

        pascalWalker.wariant_return b = null;
         b = null;
        try {
            // /home/ravn/Workspace/pascal4j/src/pascalWalker.g:322:5: ( ^( CASE a= selektor_wariantu (b+= wariant )+ ) -> czescZmiennaRekordu(selektor=$a.stwarianty=$b))
            // /home/ravn/Workspace/pascal4j/src/pascalWalker.g:322:7: ^( CASE a= selektor_wariantu (b+= wariant )+ )
            {
            match(input,CASE,FOLLOW_CASE_in_czesc_zmienna1619); 

            match(input, Token.DOWN, null); 
            pushFollow(FOLLOW_selektor_wariantu_in_czesc_zmienna1623);
            a=selektor_wariantu();

            state._fsp--;

            // /home/ravn/Workspace/pascal4j/src/pascalWalker.g:322:35: (b+= wariant )+
            int cnt20=0;
            loop20:
            do {
                int alt20=2;
                int LA20_0 = input.LA(1);

                if ( (LA20_0==VARIANT_CASE) ) {
                    alt20=1;
                }


                switch (alt20) {
            	case 1 :
            	    // /home/ravn/Workspace/pascal4j/src/pascalWalker.g:322:35: b+= wariant
            	    {
            	    pushFollow(FOLLOW_wariant_in_czesc_zmienna1627);
            	    b=wariant();

            	    state._fsp--;

            	    if (list_b==null) list_b=new ArrayList();
            	    list_b.add(b.getTemplate());


            	    }
            	    break;

            	default :
            	    if ( cnt20 >= 1 ) break loop20;
                        EarlyExitException eee =
                            new EarlyExitException(20, input);
                        throw eee;
                }
                cnt20++;
            } while (true);


            match(input, Token.UP, null); 


            // TEMPLATE REWRITE
            // 322:48: -> czescZmiennaRekordu(selektor=$a.stwarianty=$b)
            {
                retval.st = templateLib.getInstanceOf("czescZmiennaRekordu",
              new STAttrMap().put("selektor", (a!=null?a.st:null)).put("warianty", list_b));
            }


            }

        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
        }
        finally {
        }
        return retval;
    }
    // $ANTLR end "czesc_zmienna"

    public static class selektor_wariantu_return extends TreeRuleReturnScope {
        public StringTemplate st;
        public Object getTemplate() { return st; }
        public String toString() { return st==null?null:st.toString(); }
    };

    // $ANTLR start "selektor_wariantu"
    // /home/ravn/Workspace/pascal4j/src/pascalWalker.g:325:1: selektor_wariantu : ( ^( VARIANT_TAG identyfikator identyfikator_typu ) -> selektorWariantu1(id=$identyfikator.texttyp=$identyfikator_typu.st) | ^( VARIANT_TAG_NO_ID identyfikator_typu ) -> selektorWariantu2(typ=$identyfikator_typu.st));
    public final pascalWalker.selektor_wariantu_return selektor_wariantu() throws RecognitionException {
        pascalWalker.selektor_wariantu_return retval = new pascalWalker.selektor_wariantu_return();
        retval.start = input.LT(1);

        pascalWalker.identyfikator_return identyfikator27 = null;

        pascalWalker.identyfikator_typu_return identyfikator_typu28 = null;

        pascalWalker.identyfikator_typu_return identyfikator_typu29 = null;


        try {
            // /home/ravn/Workspace/pascal4j/src/pascalWalker.g:326:5: ( ^( VARIANT_TAG identyfikator identyfikator_typu ) -> selektorWariantu1(id=$identyfikator.texttyp=$identyfikator_typu.st) | ^( VARIANT_TAG_NO_ID identyfikator_typu ) -> selektorWariantu2(typ=$identyfikator_typu.st))
            int alt21=2;
            int LA21_0 = input.LA(1);

            if ( (LA21_0==VARIANT_TAG) ) {
                alt21=1;
            }
            else if ( (LA21_0==VARIANT_TAG_NO_ID) ) {
                alt21=2;
            }
            else {
                NoViableAltException nvae =
                    new NoViableAltException("", 21, 0, input);

                throw nvae;
            }
            switch (alt21) {
                case 1 :
                    // /home/ravn/Workspace/pascal4j/src/pascalWalker.g:326:7: ^( VARIANT_TAG identyfikator identyfikator_typu )
                    {
                    match(input,VARIANT_TAG,FOLLOW_VARIANT_TAG_in_selektor_wariantu1661); 

                    match(input, Token.DOWN, null); 
                    pushFollow(FOLLOW_identyfikator_in_selektor_wariantu1663);
                    identyfikator27=identyfikator();

                    state._fsp--;

                    pushFollow(FOLLOW_identyfikator_typu_in_selektor_wariantu1665);
                    identyfikator_typu28=identyfikator_typu();

                    state._fsp--;


                    match(input, Token.UP, null); 


                    // TEMPLATE REWRITE
                    // 326:55: -> selektorWariantu1(id=$identyfikator.texttyp=$identyfikator_typu.st)
                    {
                        retval.st = templateLib.getInstanceOf("selektorWariantu1",
                      new STAttrMap().put("id", (identyfikator27!=null?(input.getTokenStream().toString(
                      input.getTreeAdaptor().getTokenStartIndex(identyfikator27.start),
                      input.getTreeAdaptor().getTokenStopIndex(identyfikator27.start))):null)).put("typ", (identyfikator_typu28!=null?identyfikator_typu28.st:null)));
                    }


                    }
                    break;
                case 2 :
                    // /home/ravn/Workspace/pascal4j/src/pascalWalker.g:327:7: ^( VARIANT_TAG_NO_ID identyfikator_typu )
                    {
                    match(input,VARIANT_TAG_NO_ID,FOLLOW_VARIANT_TAG_NO_ID_in_selektor_wariantu1688); 

                    match(input, Token.DOWN, null); 
                    pushFollow(FOLLOW_identyfikator_typu_in_selektor_wariantu1690);
                    identyfikator_typu29=identyfikator_typu();

                    state._fsp--;


                    match(input, Token.UP, null); 


                    // TEMPLATE REWRITE
                    // 327:47: -> selektorWariantu2(typ=$identyfikator_typu.st)
                    {
                        retval.st = templateLib.getInstanceOf("selektorWariantu2",
                      new STAttrMap().put("typ", (identyfikator_typu29!=null?identyfikator_typu29.st:null)));
                    }


                    }
                    break;

            }
        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
        }
        finally {
        }
        return retval;
    }
    // $ANTLR end "selektor_wariantu"

    public static class wariant_return extends TreeRuleReturnScope {
        public StringTemplate st;
        public Object getTemplate() { return st; }
        public String toString() { return st==null?null:st.toString(); }
    };

    // $ANTLR start "wariant"
    // /home/ravn/Workspace/pascal4j/src/pascalWalker.g:330:1: wariant : ^( VARIANT_CASE lista_stalych_wyboru lista_pol ) -> wariant(consts=$lista_stalych_wyboru.stpola=$lista_pol.st);
    public final pascalWalker.wariant_return wariant() throws RecognitionException {
        pascalWalker.wariant_return retval = new pascalWalker.wariant_return();
        retval.start = input.LT(1);

        pascalWalker.lista_stalych_wyboru_return lista_stalych_wyboru30 = null;

        pascalWalker.lista_pol_return lista_pol31 = null;


        try {
            // /home/ravn/Workspace/pascal4j/src/pascalWalker.g:331:5: ( ^( VARIANT_CASE lista_stalych_wyboru lista_pol ) -> wariant(consts=$lista_stalych_wyboru.stpola=$lista_pol.st))
            // /home/ravn/Workspace/pascal4j/src/pascalWalker.g:331:7: ^( VARIANT_CASE lista_stalych_wyboru lista_pol )
            {
            match(input,VARIANT_CASE,FOLLOW_VARIANT_CASE_in_wariant1718); 

            match(input, Token.DOWN, null); 
            pushFollow(FOLLOW_lista_stalych_wyboru_in_wariant1720);
            lista_stalych_wyboru30=lista_stalych_wyboru();

            state._fsp--;

            pushFollow(FOLLOW_lista_pol_in_wariant1722);
            lista_pol31=lista_pol();

            state._fsp--;


            match(input, Token.UP, null); 


            // TEMPLATE REWRITE
            // 331:54: -> wariant(consts=$lista_stalych_wyboru.stpola=$lista_pol.st)
            {
                retval.st = templateLib.getInstanceOf("wariant",
              new STAttrMap().put("consts", (lista_stalych_wyboru30!=null?lista_stalych_wyboru30.st:null)).put("pola", (lista_pol31!=null?lista_pol31.st:null)));
            }


            }

        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
        }
        finally {
        }
        return retval;
    }
    // $ANTLR end "wariant"

    public static class czesc_deklarujaca_zmienne_return extends TreeRuleReturnScope {
        public int count;
        public StringTemplate st;
        public Object getTemplate() { return st; }
        public String toString() { return st==null?null:st.toString(); }
    };

    // $ANTLR start "czesc_deklarujaca_zmienne"
    // /home/ravn/Workspace/pascal4j/src/pascalWalker.g:334:1: czesc_deklarujaca_zmienne[boolean glowny] returns [int count] : ^( VAR (vars+= deklaracja_zmiennej[glowny] )+ ) -> zmienne(vars=$vars);
    public final pascalWalker.czesc_deklarujaca_zmienne_return czesc_deklarujaca_zmienne(boolean glowny) throws RecognitionException {
        pascalWalker.czesc_deklarujaca_zmienne_return retval = new pascalWalker.czesc_deklarujaca_zmienne_return();
        retval.start = input.LT(1);

        List list_vars=null;
        pascalWalker.deklaracja_zmiennej_return vars = null;
         vars = null;
        try {
            // /home/ravn/Workspace/pascal4j/src/pascalWalker.g:335:5: ( ^( VAR (vars+= deklaracja_zmiennej[glowny] )+ ) -> zmienne(vars=$vars))
            // /home/ravn/Workspace/pascal4j/src/pascalWalker.g:335:7: ^( VAR (vars+= deklaracja_zmiennej[glowny] )+ )
            {
            match(input,VAR,FOLLOW_VAR_in_czesc_deklarujaca_zmienne1760); 

            match(input, Token.DOWN, null); 
            // /home/ravn/Workspace/pascal4j/src/pascalWalker.g:335:18: (vars+= deklaracja_zmiennej[glowny] )+
            int cnt22=0;
            loop22:
            do {
                int alt22=2;
                int LA22_0 = input.LA(1);

                if ( (LA22_0==VARDECL) ) {
                    alt22=1;
                }


                switch (alt22) {
            	case 1 :
            	    // /home/ravn/Workspace/pascal4j/src/pascalWalker.g:335:18: vars+= deklaracja_zmiennej[glowny]
            	    {
            	    pushFollow(FOLLOW_deklaracja_zmiennej_in_czesc_deklarujaca_zmienne1764);
            	    vars=deklaracja_zmiennej(glowny);

            	    state._fsp--;

            	    if (list_vars==null) list_vars=new ArrayList();
            	    list_vars.add(vars.getTemplate());


            	    }
            	    break;

            	default :
            	    if ( cnt22 >= 1 ) break loop22;
                        EarlyExitException eee =
                            new EarlyExitException(22, input);
                        throw eee;
                }
                cnt22++;
            } while (true);


            match(input, Token.UP, null); 

                	retval.count =list_vars.size(); 
                	//System.out.println("czesc_deklarujaca_zmienne "+((PScope_scope)PScope_stack.peek()).varCount); 
                


            // TEMPLATE REWRITE
            // 339:7: -> zmienne(vars=$vars)
            {
                retval.st = templateLib.getInstanceOf("zmienne",
              new STAttrMap().put("vars", list_vars));
            }


            }

        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
        }
        finally {
        }
        return retval;
    }
    // $ANTLR end "czesc_deklarujaca_zmienne"

    public static class deklaracja_zmiennej_return extends TreeRuleReturnScope {
        public StringTemplate st;
        public Object getTemplate() { return st; }
        public String toString() { return st==null?null:st.toString(); }
    };

    // $ANTLR start "deklaracja_zmiennej"
    // /home/ravn/Workspace/pascal4j/src/pascalWalker.g:342:1: deklaracja_zmiennej[boolean glowny] : ^( VARDECL nowy_typ lista_identyfikatorow[$nowy_typ.typ,glowny] ) ({...}? -> zmienna_glowny(ids=$lista_identyfikatorow.atype=$nowy_typ.ststring=$nowy_typ.typ==3 ? \"string\" : nullfloat=$nowy_typ.typ==2 ? \"float\" : null) | {...}? -> zmienna(ids=$lista_identyfikatorow.atype=$nowy_typ.st)) ;
    public final pascalWalker.deklaracja_zmiennej_return deklaracja_zmiennej(boolean glowny) throws RecognitionException {
        pascalWalker.deklaracja_zmiennej_return retval = new pascalWalker.deklaracja_zmiennej_return();
        retval.start = input.LT(1);

        pascalWalker.nowy_typ_return nowy_typ32 = null;

        pascalWalker.lista_identyfikatorow_return lista_identyfikatorow33 = null;


        try {
            // /home/ravn/Workspace/pascal4j/src/pascalWalker.g:344:1: ( ^( VARDECL nowy_typ lista_identyfikatorow[$nowy_typ.typ,glowny] ) ({...}? -> zmienna_glowny(ids=$lista_identyfikatorow.atype=$nowy_typ.ststring=$nowy_typ.typ==3 ? \"string\" : nullfloat=$nowy_typ.typ==2 ? \"float\" : null) | {...}? -> zmienna(ids=$lista_identyfikatorow.atype=$nowy_typ.st)) )
            // /home/ravn/Workspace/pascal4j/src/pascalWalker.g:344:3: ^( VARDECL nowy_typ lista_identyfikatorow[$nowy_typ.typ,glowny] ) ({...}? -> zmienna_glowny(ids=$lista_identyfikatorow.atype=$nowy_typ.ststring=$nowy_typ.typ==3 ? \"string\" : nullfloat=$nowy_typ.typ==2 ? \"float\" : null) | {...}? -> zmienna(ids=$lista_identyfikatorow.atype=$nowy_typ.st))
            {
            match(input,VARDECL,FOLLOW_VARDECL_in_deklaracja_zmiennej1800); 

            match(input, Token.DOWN, null); 
            pushFollow(FOLLOW_nowy_typ_in_deklaracja_zmiennej1802);
            nowy_typ32=nowy_typ();

            state._fsp--;

            pushFollow(FOLLOW_lista_identyfikatorow_in_deklaracja_zmiennej1804);
            lista_identyfikatorow33=lista_identyfikatorow((nowy_typ32!=null?nowy_typ32.typ:0), glowny);

            state._fsp--;


            match(input, Token.UP, null); 
            // /home/ravn/Workspace/pascal4j/src/pascalWalker.g:345:5: ({...}? -> zmienna_glowny(ids=$lista_identyfikatorow.atype=$nowy_typ.ststring=$nowy_typ.typ==3 ? \"string\" : nullfloat=$nowy_typ.typ==2 ? \"float\" : null) | {...}? -> zmienna(ids=$lista_identyfikatorow.atype=$nowy_typ.st))
            int alt23=2;
            int LA23_0 = input.LA(1);

            if ( (LA23_0==UP) ) {
                int LA23_1 = input.LA(2);

                if ( ((glowny)) ) {
                    alt23=1;
                }
                else if ( ((!glowny)) ) {
                    alt23=2;
                }
                else {
                    NoViableAltException nvae =
                        new NoViableAltException("", 23, 1, input);

                    throw nvae;
                }
            }
            else if ( (LA23_0==VARDECL) ) {
                int LA23_2 = input.LA(2);

                if ( ((glowny)) ) {
                    alt23=1;
                }
                else if ( ((!glowny)) ) {
                    alt23=2;
                }
                else {
                    NoViableAltException nvae =
                        new NoViableAltException("", 23, 2, input);

                    throw nvae;
                }
            }
            else {
                NoViableAltException nvae =
                    new NoViableAltException("", 23, 0, input);

                throw nvae;
            }
            switch (alt23) {
                case 1 :
                    // /home/ravn/Workspace/pascal4j/src/pascalWalker.g:345:7: {...}?
                    {
                    if ( !((glowny)) ) {
                        throw new FailedPredicateException(input, "deklaracja_zmiennej", "$glowny");
                    }


                    // TEMPLATE REWRITE
                    // 345:18: -> zmienna_glowny(ids=$lista_identyfikatorow.atype=$nowy_typ.ststring=$nowy_typ.typ==3 ? \"string\" : nullfloat=$nowy_typ.typ==2 ? \"float\" : null)
                    {
                        retval.st = templateLib.getInstanceOf("zmienna_glowny",
                      new STAttrMap().put("ids", (lista_identyfikatorow33!=null?lista_identyfikatorow33.a:null)).put("type", (nowy_typ32!=null?nowy_typ32.st:null)).put("string", (nowy_typ32!=null?nowy_typ32.typ:0)==3 ? "string" : null).put("float", (nowy_typ32!=null?nowy_typ32.typ:0)==2 ? "float" : null));
                    }


                    }
                    break;
                case 2 :
                    // /home/ravn/Workspace/pascal4j/src/pascalWalker.g:346:9: {...}?
                    {
                    if ( !((!glowny)) ) {
                        throw new FailedPredicateException(input, "deklaracja_zmiennej", "!$glowny");
                    }


                    // TEMPLATE REWRITE
                    // 346:21: -> zmienna(ids=$lista_identyfikatorow.atype=$nowy_typ.st)
                    {
                        retval.st = templateLib.getInstanceOf("zmienna",
                      new STAttrMap().put("ids", (lista_identyfikatorow33!=null?lista_identyfikatorow33.a:null)).put("type", (nowy_typ32!=null?nowy_typ32.st:null)));
                    }


                    }
                    break;

            }


            }

        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
        }
        finally {
        }
        return retval;
    }
    // $ANTLR end "deklaracja_zmiennej"

    public static class czesc_deklarujaca_procedury_i_funkcje_return extends TreeRuleReturnScope {
        public StringTemplate st;
        public Object getTemplate() { return st; }
        public String toString() { return st==null?null:st.toString(); }
    };

    // $ANTLR start "czesc_deklarujaca_procedury_i_funkcje"
    // /home/ravn/Workspace/pascal4j/src/pascalWalker.g:349:1: czesc_deklarujaca_procedury_i_funkcje[boolean glowny] : (d+= deklaracja_procedury_lub_funkcji[glowny] )+ -> operacje(ops=$d);
    public final pascalWalker.czesc_deklarujaca_procedury_i_funkcje_return czesc_deklarujaca_procedury_i_funkcje(boolean glowny) throws RecognitionException {
        pascalWalker.czesc_deklarujaca_procedury_i_funkcje_return retval = new pascalWalker.czesc_deklarujaca_procedury_i_funkcje_return();
        retval.start = input.LT(1);

        List list_d=null;
        pascalWalker.deklaracja_procedury_lub_funkcji_return d = null;
         d = null;
        try {
            // /home/ravn/Workspace/pascal4j/src/pascalWalker.g:350:5: ( (d+= deklaracja_procedury_lub_funkcji[glowny] )+ -> operacje(ops=$d))
            // /home/ravn/Workspace/pascal4j/src/pascalWalker.g:350:7: (d+= deklaracja_procedury_lub_funkcji[glowny] )+
            {
            // /home/ravn/Workspace/pascal4j/src/pascalWalker.g:350:8: (d+= deklaracja_procedury_lub_funkcji[glowny] )+
            int cnt24=0;
            loop24:
            do {
                int alt24=2;
                int LA24_0 = input.LA(1);

                if ( (LA24_0==PROCEDURE) ) {
                    alt24=1;
                }
                else if ( (LA24_0==FUNCTION) ) {
                    alt24=1;
                }


                switch (alt24) {
            	case 1 :
            	    // /home/ravn/Workspace/pascal4j/src/pascalWalker.g:350:8: d+= deklaracja_procedury_lub_funkcji[glowny]
            	    {
            	    pushFollow(FOLLOW_deklaracja_procedury_lub_funkcji_in_czesc_deklarujaca_procedury_i_funkcje1887);
            	    d=deklaracja_procedury_lub_funkcji(glowny);

            	    state._fsp--;

            	    if (list_d==null) list_d=new ArrayList();
            	    list_d.add(d.getTemplate());


            	    }
            	    break;

            	default :
            	    if ( cnt24 >= 1 ) break loop24;
                        EarlyExitException eee =
                            new EarlyExitException(24, input);
                        throw eee;
                }
                cnt24++;
            } while (true);



            // TEMPLATE REWRITE
            // 350:52: -> operacje(ops=$d)
            {
                retval.st = templateLib.getInstanceOf("operacje",
              new STAttrMap().put("ops", list_d));
            }


            }

        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
        }
        finally {
        }
        return retval;
    }
    // $ANTLR end "czesc_deklarujaca_procedury_i_funkcje"

    public static class deklaracja_procedury_lub_funkcji_return extends TreeRuleReturnScope {
        public StringTemplate st;
        public Object getTemplate() { return st; }
        public String toString() { return st==null?null:st.toString(); }
    };

    // $ANTLR start "deklaracja_procedury_lub_funkcji"
    // /home/ravn/Workspace/pascal4j/src/pascalWalker.g:353:1: deklaracja_procedury_lub_funkcji[boolean glowny] : ( deklaracja_procedury -> przekaz(item=$deklaracja_procedury.st) | deklaracja_funkcji -> przekaz(item=$deklaracja_funkcji.st));
    public final pascalWalker.deklaracja_procedury_lub_funkcji_return deklaracja_procedury_lub_funkcji(boolean glowny) throws RecognitionException {
        pascalWalker.deklaracja_procedury_lub_funkcji_return retval = new pascalWalker.deklaracja_procedury_lub_funkcji_return();
        retval.start = input.LT(1);

        pascalWalker.deklaracja_procedury_return deklaracja_procedury34 = null;

        pascalWalker.deklaracja_funkcji_return deklaracja_funkcji35 = null;


        try {
            // /home/ravn/Workspace/pascal4j/src/pascalWalker.g:354:5: ( deklaracja_procedury -> przekaz(item=$deklaracja_procedury.st) | deklaracja_funkcji -> przekaz(item=$deklaracja_funkcji.st))
            int alt25=2;
            int LA25_0 = input.LA(1);

            if ( (LA25_0==PROCEDURE) ) {
                alt25=1;
            }
            else if ( (LA25_0==FUNCTION) ) {
                alt25=2;
            }
            else {
                NoViableAltException nvae =
                    new NoViableAltException("", 25, 0, input);

                throw nvae;
            }
            switch (alt25) {
                case 1 :
                    // /home/ravn/Workspace/pascal4j/src/pascalWalker.g:354:7: deklaracja_procedury
                    {
                    pushFollow(FOLLOW_deklaracja_procedury_in_deklaracja_procedury_lub_funkcji1916);
                    deklaracja_procedury34=deklaracja_procedury();

                    state._fsp--;

                     
                        	if(!glowny) {
                        		System.out.println("Nie mozna definiowac procedury w zagniezdzonych blokach (np. w procedurach)");
                        		System.exit(1);
                        	} 


                    // TEMPLATE REWRITE
                    // 358:10: -> przekaz(item=$deklaracja_procedury.st)
                    {
                        retval.st = templateLib.getInstanceOf("przekaz",
                      new STAttrMap().put("item", (deklaracja_procedury34!=null?deklaracja_procedury34.st:null)));
                    }


                    }
                    break;
                case 2 :
                    // /home/ravn/Workspace/pascal4j/src/pascalWalker.g:359:7: deklaracja_funkcji
                    {
                    pushFollow(FOLLOW_deklaracja_funkcji_in_deklaracja_procedury_lub_funkcji1935);
                    deklaracja_funkcji35=deklaracja_funkcji();

                    state._fsp--;

                     
                        	if(!glowny) {
                        		System.out.println("Nie mozna definiowac funkcji w zagniezdzonych blokach (np. w procedurach)");
                        		System.exit(1);
                        	} 


                    // TEMPLATE REWRITE
                    // 363:9: -> przekaz(item=$deklaracja_funkcji.st)
                    {
                        retval.st = templateLib.getInstanceOf("przekaz",
                      new STAttrMap().put("item", (deklaracja_funkcji35!=null?deklaracja_funkcji35.st:null)));
                    }


                    }
                    break;

            }
        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
        }
        finally {
        }
        return retval;
    }
    // $ANTLR end "deklaracja_procedury_lub_funkcji"

    public static class deklaracja_procedury_return extends TreeRuleReturnScope {
        public StringTemplate st;
        public Object getTemplate() { return st; }
        public String toString() { return st==null?null:st.toString(); }
    };

    // $ANTLR start "deklaracja_procedury"
    // /home/ravn/Workspace/pascal4j/src/pascalWalker.g:366:1: deklaracja_procedury : ^( PROCEDURE IDENT ( lista_parametrow_formalnych )? blok[false,$PScope::liczbaParametrow] ) -> procedura(nazwa=$IDENT.textvars=$lista_parametrow_formalnych.stblok=$blok.ststack=$blok.stack+1varnum=$blok.locals+$PScope::liczbaParametrowtypy=$lista_parametrow_formalnych.typy);
    public final pascalWalker.deklaracja_procedury_return deklaracja_procedury() throws RecognitionException {
        PScope_stack.push(new PScope_scope());

        pascalWalker.deklaracja_procedury_return retval = new pascalWalker.deklaracja_procedury_return();
        retval.start = input.LT(1);

        CommonTree IDENT36=null;
        pascalWalker.lista_parametrow_formalnych_return lista_parametrow_formalnych37 = null;

        pascalWalker.blok_return blok38 = null;



        	((PScope_scope)PScope_stack.peek()).symbols = new ArrayList<Symbol>();
        	((PScope_scope)PScope_stack.peek()).name = "procedura";
        	((PScope_scope)PScope_stack.peek()).liczbaParametrow = 0;

        try {
            // /home/ravn/Workspace/pascal4j/src/pascalWalker.g:373:5: ( ^( PROCEDURE IDENT ( lista_parametrow_formalnych )? blok[false,$PScope::liczbaParametrow] ) -> procedura(nazwa=$IDENT.textvars=$lista_parametrow_formalnych.stblok=$blok.ststack=$blok.stack+1varnum=$blok.locals+$PScope::liczbaParametrowtypy=$lista_parametrow_formalnych.typy))
            // /home/ravn/Workspace/pascal4j/src/pascalWalker.g:373:7: ^( PROCEDURE IDENT ( lista_parametrow_formalnych )? blok[false,$PScope::liczbaParametrow] )
            {
            match(input,PROCEDURE,FOLLOW_PROCEDURE_in_deklaracja_procedury1973); 

            match(input, Token.DOWN, null); 
            IDENT36=(CommonTree)match(input,IDENT,FOLLOW_IDENT_in_deklaracja_procedury1975); 
            // /home/ravn/Workspace/pascal4j/src/pascalWalker.g:373:25: ( lista_parametrow_formalnych )?
            int alt26=2;
            int LA26_0 = input.LA(1);

            if ( (LA26_0==ARGDECLS) ) {
                alt26=1;
            }
            switch (alt26) {
                case 1 :
                    // /home/ravn/Workspace/pascal4j/src/pascalWalker.g:373:25: lista_parametrow_formalnych
                    {
                    pushFollow(FOLLOW_lista_parametrow_formalnych_in_deklaracja_procedury1977);
                    lista_parametrow_formalnych37=lista_parametrow_formalnych();

                    state._fsp--;


                    }
                    break;

            }

            pushFollow(FOLLOW_blok_in_deklaracja_procedury1980);
            blok38=blok(false, ((PScope_scope)PScope_stack.peek()).liczbaParametrow);

            state._fsp--;


            match(input, Token.UP, null); 

                		//System.out.println("Procedura "+(IDENT36!=null?IDENT36.getText():null));
                		int i=PScope_stack.size()-2;
                		Symbol newSymbol=new Symbol((IDENT36!=null?IDENT36.getText():null),"procedura");
                		if(((PScope_scope)PScope_stack.elementAt(i)).symbols.contains(newSymbol)) {
                			System.err.println("Procedura "+newSymbol.name+" zostala juz wczesniej zdeklarowana.");
                			System.exit(1);
                		}
                		((PScope_scope)PScope_stack.elementAt(i)).symbols.add(newSymbol);
                


            // TEMPLATE REWRITE
            // 382:7: -> procedura(nazwa=$IDENT.textvars=$lista_parametrow_formalnych.stblok=$blok.ststack=$blok.stack+1varnum=$blok.locals+$PScope::liczbaParametrowtypy=$lista_parametrow_formalnych.typy)
            {
                retval.st = templateLib.getInstanceOf("procedura",
              new STAttrMap().put("nazwa", (IDENT36!=null?IDENT36.getText():null)).put("vars", (lista_parametrow_formalnych37!=null?lista_parametrow_formalnych37.st:null)).put("blok", (blok38!=null?blok38.st:null)).put("stack", (blok38!=null?blok38.stack:0)+1).put("varnum", (blok38!=null?blok38.locals:0)+((PScope_scope)PScope_stack.peek()).liczbaParametrow).put("typy", (lista_parametrow_formalnych37!=null?lista_parametrow_formalnych37.typy:null)));
            }


            }

        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
        }
        finally {
            PScope_stack.pop();

        }
        return retval;
    }
    // $ANTLR end "deklaracja_procedury"

    public static class lista_parametrow_formalnych_return extends TreeRuleReturnScope {
        public String typy;
        public StringTemplate st;
        public Object getTemplate() { return st; }
        public String toString() { return st==null?null:st.toString(); }
    };

    // $ANTLR start "lista_parametrow_formalnych"
    // /home/ravn/Workspace/pascal4j/src/pascalWalker.g:385:1: lista_parametrow_formalnych returns [String typy] : ^( ARGDECLS (a+= sekcja_parametrow_formalnych )+ ) -> zmienne(vars=$a);
    public final pascalWalker.lista_parametrow_formalnych_return lista_parametrow_formalnych() throws RecognitionException {
        pascalWalker.lista_parametrow_formalnych_return retval = new pascalWalker.lista_parametrow_formalnych_return();
        retval.start = input.LT(1);

        List list_a=null;
        pascalWalker.sekcja_parametrow_formalnych_return a = null;
         a = null;

        	retval.typy ="";

        try {
            // /home/ravn/Workspace/pascal4j/src/pascalWalker.g:389:5: ( ^( ARGDECLS (a+= sekcja_parametrow_formalnych )+ ) -> zmienne(vars=$a))
            // /home/ravn/Workspace/pascal4j/src/pascalWalker.g:389:7: ^( ARGDECLS (a+= sekcja_parametrow_formalnych )+ )
            {
            match(input,ARGDECLS,FOLLOW_ARGDECLS_in_lista_parametrow_formalnych2040); 

            match(input, Token.DOWN, null); 
            // /home/ravn/Workspace/pascal4j/src/pascalWalker.g:389:19: (a+= sekcja_parametrow_formalnych )+
            int cnt27=0;
            loop27:
            do {
                int alt27=2;
                int LA27_0 = input.LA(1);

                if ( (LA27_0==ARGDECL||LA27_0==VAR) ) {
                    alt27=1;
                }


                switch (alt27) {
            	case 1 :
            	    // /home/ravn/Workspace/pascal4j/src/pascalWalker.g:389:19: a+= sekcja_parametrow_formalnych
            	    {
            	    pushFollow(FOLLOW_sekcja_parametrow_formalnych_in_lista_parametrow_formalnych2044);
            	    a=sekcja_parametrow_formalnych();

            	    state._fsp--;

            	    if (list_a==null) list_a=new ArrayList();
            	    list_a.add(a.getTemplate());


            	    }
            	    break;

            	default :
            	    if ( cnt27 >= 1 ) break loop27;
                        EarlyExitException eee =
                            new EarlyExitException(27, input);
                        throw eee;
                }
                cnt27++;
            } while (true);


            match(input, Token.UP, null); 

                    	int typ=(a!=null?a.typ:0);
            	    	switch(typ) {
            	    		case 1:	{ if(retval.typy.equals(""))
            	    				retval.typy ="I";
            	    			else
            	    				retval.typy.concat(",I");
            	    			break;
            	    			}
            	    		case 2:	{ if(retval.typy.equals(""))
            	    				retval.typy ="F";
            	    			else
            	    				retval.typy.concat(",F");
            	    			break;
            	    			}
            	    		case 3:	{ if(retval.typy.equals(""))
            	    				retval.typy ="Ljava/lang/String;";
            	    			else
            	    				retval.typy.concat(",Ljava/lang/String;");
            	    			break;
            	    			}
            	    	} 
                	


            // TEMPLATE REWRITE
            // 412:6: -> zmienne(vars=$a)
            {
                retval.st = templateLib.getInstanceOf("zmienne",
              new STAttrMap().put("vars", list_a));
            }


            }

        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
        }
        finally {
        }
        return retval;
    }
    // $ANTLR end "lista_parametrow_formalnych"

    public static class sekcja_parametrow_formalnych_return extends TreeRuleReturnScope {
        public int count;
        public int typ;
        public StringTemplate st;
        public Object getTemplate() { return st; }
        public String toString() { return st==null?null:st.toString(); }
    };

    // $ANTLR start "sekcja_parametrow_formalnych"
    // /home/ravn/Workspace/pascal4j/src/pascalWalker.g:415:1: sekcja_parametrow_formalnych returns [int count, int typ] : ( grupa_parametrow -> przekaz(item=$grupa_parametrow.st) | ^( VAR grupa_parametrow ) -> przekaz(item=$grupa_parametrow.st));
    public final pascalWalker.sekcja_parametrow_formalnych_return sekcja_parametrow_formalnych() throws RecognitionException {
        pascalWalker.sekcja_parametrow_formalnych_return retval = new pascalWalker.sekcja_parametrow_formalnych_return();
        retval.start = input.LT(1);

        pascalWalker.grupa_parametrow_return grupa_parametrow39 = null;

        pascalWalker.grupa_parametrow_return grupa_parametrow40 = null;


        try {
            // /home/ravn/Workspace/pascal4j/src/pascalWalker.g:416:5: ( grupa_parametrow -> przekaz(item=$grupa_parametrow.st) | ^( VAR grupa_parametrow ) -> przekaz(item=$grupa_parametrow.st))
            int alt28=2;
            int LA28_0 = input.LA(1);

            if ( (LA28_0==ARGDECL) ) {
                alt28=1;
            }
            else if ( (LA28_0==VAR) ) {
                alt28=2;
            }
            else {
                NoViableAltException nvae =
                    new NoViableAltException("", 28, 0, input);

                throw nvae;
            }
            switch (alt28) {
                case 1 :
                    // /home/ravn/Workspace/pascal4j/src/pascalWalker.g:416:7: grupa_parametrow
                    {
                    pushFollow(FOLLOW_grupa_parametrow_in_sekcja_parametrow_formalnych2083);
                    grupa_parametrow39=grupa_parametrow();

                    state._fsp--;

                     
                        	retval.count =(grupa_parametrow39!=null?grupa_parametrow39.count:0); 
                        	((PScope_scope)PScope_stack.peek()).liczbaParametrow+=(grupa_parametrow39!=null?grupa_parametrow39.count:0); 
                        	retval.typ =(grupa_parametrow39!=null?grupa_parametrow39.typ:0);
                        


                    // TEMPLATE REWRITE
                    // 421:7: -> przekaz(item=$grupa_parametrow.st)
                    {
                        retval.st = templateLib.getInstanceOf("przekaz",
                      new STAttrMap().put("item", (grupa_parametrow39!=null?grupa_parametrow39.st:null)));
                    }


                    }
                    break;
                case 2 :
                    // /home/ravn/Workspace/pascal4j/src/pascalWalker.g:422:7: ^( VAR grupa_parametrow )
                    {
                    match(input,VAR,FOLLOW_VAR_in_sekcja_parametrow_formalnych2108); 

                    match(input, Token.DOWN, null); 
                    pushFollow(FOLLOW_grupa_parametrow_in_sekcja_parametrow_formalnych2110);
                    grupa_parametrow40=grupa_parametrow();

                    state._fsp--;


                    match(input, Token.UP, null); 
                     retval.count =(grupa_parametrow40!=null?grupa_parametrow40.count:0); ((PScope_scope)PScope_stack.peek()).liczbaParametrow+=(grupa_parametrow40!=null?grupa_parametrow40.count:0); retval.typ =(grupa_parametrow40!=null?grupa_parametrow40.typ:0); 


                    // TEMPLATE REWRITE
                    // 422:147: -> przekaz(item=$grupa_parametrow.st)
                    {
                        retval.st = templateLib.getInstanceOf("przekaz",
                      new STAttrMap().put("item", (grupa_parametrow40!=null?grupa_parametrow40.st:null)));
                    }


                    }
                    break;

            }
        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
        }
        finally {
        }
        return retval;
    }
    // $ANTLR end "sekcja_parametrow_formalnych"

    public static class grupa_parametrow_return extends TreeRuleReturnScope {
        public int count;
        public int typ;
        public StringTemplate st;
        public Object getTemplate() { return st; }
        public String toString() { return st==null?null:st.toString(); }
    };

    // $ANTLR start "grupa_parametrow"
    // /home/ravn/Workspace/pascal4j/src/pascalWalker.g:425:1: grupa_parametrow returns [int count,int typ] : ^( ARGDECL identyfikator_typu lista_identyfikatorow[$identyfikator_typu.typ,false] ) -> zmienna(ids=$lista_identyfikatorow.sttype=$identyfikator_typu.st);
    public final pascalWalker.grupa_parametrow_return grupa_parametrow() throws RecognitionException {
        pascalWalker.grupa_parametrow_return retval = new pascalWalker.grupa_parametrow_return();
        retval.start = input.LT(1);

        pascalWalker.identyfikator_typu_return identyfikator_typu41 = null;

        pascalWalker.lista_identyfikatorow_return lista_identyfikatorow42 = null;


        try {
            // /home/ravn/Workspace/pascal4j/src/pascalWalker.g:427:6: ( ^( ARGDECL identyfikator_typu lista_identyfikatorow[$identyfikator_typu.typ,false] ) -> zmienna(ids=$lista_identyfikatorow.sttype=$identyfikator_typu.st))
            // /home/ravn/Workspace/pascal4j/src/pascalWalker.g:427:8: ^( ARGDECL identyfikator_typu lista_identyfikatorow[$identyfikator_typu.typ,false] )
            {
            match(input,ARGDECL,FOLLOW_ARGDECL_in_grupa_parametrow2146); 

            match(input, Token.DOWN, null); 
            pushFollow(FOLLOW_identyfikator_typu_in_grupa_parametrow2148);
            identyfikator_typu41=identyfikator_typu();

            state._fsp--;

            pushFollow(FOLLOW_lista_identyfikatorow_in_grupa_parametrow2150);
            lista_identyfikatorow42=lista_identyfikatorow((identyfikator_typu41!=null?identyfikator_typu41.typ:0), false);

            state._fsp--;


            match(input, Token.UP, null); 
             retval.count =(lista_identyfikatorow42!=null?lista_identyfikatorow42.count:0); retval.typ =(identyfikator_typu41!=null?identyfikator_typu41.typ:0); 


            // TEMPLATE REWRITE
            // 427:162: -> zmienna(ids=$lista_identyfikatorow.sttype=$identyfikator_typu.st)
            {
                retval.st = templateLib.getInstanceOf("zmienna",
              new STAttrMap().put("ids", (lista_identyfikatorow42!=null?lista_identyfikatorow42.st:null)).put("type", (identyfikator_typu41!=null?identyfikator_typu41.st:null)));
            }


            }

        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
        }
        finally {
        }
        return retval;
    }
    // $ANTLR end "grupa_parametrow"

    public static class lista_identyfikatorow_return extends TreeRuleReturnScope {
        public List<String> a;
        public int count;
        public StringTemplate st;
        public Object getTemplate() { return st; }
        public String toString() { return st==null?null:st.toString(); }
    };

    // $ANTLR start "lista_identyfikatorow"
    // /home/ravn/Workspace/pascal4j/src/pascalWalker.g:430:1: lista_identyfikatorow[int typ,boolean glowny] returns [List<String> a, int count] : ^( IDLIST (ids+= identyfikator_w_procedurze[typ,glowny] )+ ) -> commaIdList(ids=$ids);
    public final pascalWalker.lista_identyfikatorow_return lista_identyfikatorow(int typ, boolean glowny) throws RecognitionException {
        pascalWalker.lista_identyfikatorow_return retval = new pascalWalker.lista_identyfikatorow_return();
        retval.start = input.LT(1);

        List list_ids=null;
        pascalWalker.identyfikator_w_procedurze_return ids = null;
         ids = null;
        try {
            // /home/ravn/Workspace/pascal4j/src/pascalWalker.g:431:5: ( ^( IDLIST (ids+= identyfikator_w_procedurze[typ,glowny] )+ ) -> commaIdList(ids=$ids))
            // /home/ravn/Workspace/pascal4j/src/pascalWalker.g:431:7: ^( IDLIST (ids+= identyfikator_w_procedurze[typ,glowny] )+ )
            {
            match(input,IDLIST,FOLLOW_IDLIST_in_lista_identyfikatorow2191); 

            match(input, Token.DOWN, null); 
            // /home/ravn/Workspace/pascal4j/src/pascalWalker.g:431:19: (ids+= identyfikator_w_procedurze[typ,glowny] )+
            int cnt29=0;
            loop29:
            do {
                int alt29=2;
                int LA29_0 = input.LA(1);

                if ( (LA29_0==IDENT) ) {
                    alt29=1;
                }


                switch (alt29) {
            	case 1 :
            	    // /home/ravn/Workspace/pascal4j/src/pascalWalker.g:431:19: ids+= identyfikator_w_procedurze[typ,glowny]
            	    {
            	    pushFollow(FOLLOW_identyfikator_w_procedurze_in_lista_identyfikatorow2195);
            	    ids=identyfikator_w_procedurze(typ, glowny);

            	    state._fsp--;

            	    if (list_ids==null) list_ids=new ArrayList();
            	    list_ids.add(ids.getTemplate());


            	    }
            	    break;

            	default :
            	    if ( cnt29 >= 1 ) break loop29;
                        EarlyExitException eee =
                            new EarlyExitException(29, input);
                        throw eee;
                }
                cnt29++;
            } while (true);


            match(input, Token.UP, null); 
             retval.a =list_ids; retval.count =list_ids.size(); 


            // TEMPLATE REWRITE
            // 431:95: -> commaIdList(ids=$ids)
            {
                retval.st = templateLib.getInstanceOf("commaIdList",
              new STAttrMap().put("ids", list_ids));
            }


            }

        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
        }
        finally {
        }
        return retval;
    }
    // $ANTLR end "lista_identyfikatorow"

    public static class identyfikator_w_procedurze_return extends TreeRuleReturnScope {
        public String id;
        public StringTemplate st;
        public Object getTemplate() { return st; }
        public String toString() { return st==null?null:st.toString(); }
    };

    // $ANTLR start "identyfikator_w_procedurze"
    // /home/ravn/Workspace/pascal4j/src/pascalWalker.g:434:1: identyfikator_w_procedurze[int typ,boolean glowny] returns [String id] : IDENT -> przekaz(item=$IDENT.text);
    public final pascalWalker.identyfikator_w_procedurze_return identyfikator_w_procedurze(int typ, boolean glowny) throws RecognitionException {
        pascalWalker.identyfikator_w_procedurze_return retval = new pascalWalker.identyfikator_w_procedurze_return();
        retval.start = input.LT(1);

        CommonTree IDENT43=null;

        try {
            // /home/ravn/Workspace/pascal4j/src/pascalWalker.g:435:2: ( IDENT -> przekaz(item=$IDENT.text))
            // /home/ravn/Workspace/pascal4j/src/pascalWalker.g:435:4: IDENT
            {
            IDENT43=(CommonTree)match(input,IDENT,FOLLOW_IDENT_in_identyfikator_w_procedurze2233); 

            		//System.out.println("Zmienna: "+(IDENT43!=null?IDENT43.getText():null)+" count: "+((PScope_scope)PScope_stack.peek()).varCount);
            		Symbol newSymbol=new Symbol((IDENT43!=null?IDENT43.getText():null),"zmienna",((PScope_scope)PScope_stack.peek()).varCount,typ,glowny);
                		if(((PScope_scope)PScope_stack.peek()).symbols.contains(newSymbol)) {
                			System.err.println("Zmienna "+newSymbol.name+" zostala juz wczesniej zdeklarowana.");
                			System.exit(1);
                		}
                		((PScope_scope)PScope_stack.peek()).symbols.add(newSymbol);
                		retval.id =(IDENT43!=null?IDENT43.getText():null);
                		((PScope_scope)PScope_stack.peek()).varCount++;
            	


            // TEMPLATE REWRITE
            // 445:4: -> przekaz(item=$IDENT.text)
            {
                retval.st = templateLib.getInstanceOf("przekaz",
              new STAttrMap().put("item", (IDENT43!=null?IDENT43.getText():null)));
            }


            }

        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
        }
        finally {
        }
        return retval;
    }
    // $ANTLR end "identyfikator_w_procedurze"

    public static class lista_stalych_wyboru_return extends TreeRuleReturnScope {
        public StringTemplate st;
        public Object getTemplate() { return st; }
        public String toString() { return st==null?null:st.toString(); }
    };

    // $ANTLR start "lista_stalych_wyboru"
    // /home/ravn/Workspace/pascal4j/src/pascalWalker.g:448:1: lista_stalych_wyboru : ^( CONSTLIST (a+= stala )+ ) -> listaStalychWyboru(consts=$a);
    public final pascalWalker.lista_stalych_wyboru_return lista_stalych_wyboru() throws RecognitionException {
        pascalWalker.lista_stalych_wyboru_return retval = new pascalWalker.lista_stalych_wyboru_return();
        retval.start = input.LT(1);

        List list_a=null;
        pascalWalker.stala_return a = null;
         a = null;
        try {
            // /home/ravn/Workspace/pascal4j/src/pascalWalker.g:449:5: ( ^( CONSTLIST (a+= stala )+ ) -> listaStalychWyboru(consts=$a))
            // /home/ravn/Workspace/pascal4j/src/pascalWalker.g:449:7: ^( CONSTLIST (a+= stala )+ )
            {
            match(input,CONSTLIST,FOLLOW_CONSTLIST_in_lista_stalych_wyboru2259); 

            match(input, Token.DOWN, null); 
            // /home/ravn/Workspace/pascal4j/src/pascalWalker.g:449:20: (a+= stala )+
            int cnt30=0;
            loop30:
            do {
                int alt30=2;
                int LA30_0 = input.LA(1);

                if ( (LA30_0==IDENT||(LA30_0>=NUM_INT && LA30_0<=STRING_LITERAL)) ) {
                    alt30=1;
                }


                switch (alt30) {
            	case 1 :
            	    // /home/ravn/Workspace/pascal4j/src/pascalWalker.g:449:20: a+= stala
            	    {
            	    pushFollow(FOLLOW_stala_in_lista_stalych_wyboru2263);
            	    a=stala();

            	    state._fsp--;

            	    if (list_a==null) list_a=new ArrayList();
            	    list_a.add(a.getTemplate());


            	    }
            	    break;

            	default :
            	    if ( cnt30 >= 1 ) break loop30;
                        EarlyExitException eee =
                            new EarlyExitException(30, input);
                        throw eee;
                }
                cnt30++;
            } while (true);


            match(input, Token.UP, null); 


            // TEMPLATE REWRITE
            // 449:30: -> listaStalychWyboru(consts=$a)
            {
                retval.st = templateLib.getInstanceOf("listaStalychWyboru",
              new STAttrMap().put("consts", list_a));
            }


            }

        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
        }
        finally {
        }
        return retval;
    }
    // $ANTLR end "lista_stalych_wyboru"

    public static class deklaracja_funkcji_return extends TreeRuleReturnScope {
        public StringTemplate st;
        public Object getTemplate() { return st; }
        public String toString() { return st==null?null:st.toString(); }
    };

    // $ANTLR start "deklaracja_funkcji"
    // /home/ravn/Workspace/pascal4j/src/pascalWalker.g:452:1: deklaracja_funkcji : ^( FUNCTION IDENT ( lista_parametrow_formalnych )? typ_wyniku blok[false,$PScope::liczbaParametrow] ) -> funkcja(nazwa=$IDENT.textvars=$lista_parametrow_formalnych.stblok=$blok.stwynik=$typ_wyniku.ststack=$blok.stackvarnum=$blok.locals+$PScope::liczbaParametrowretnum=$blok.locals+$PScope::liczbaParametrow-1);
    public final pascalWalker.deklaracja_funkcji_return deklaracja_funkcji() throws RecognitionException {
        PScope_stack.push(new PScope_scope());

        pascalWalker.deklaracja_funkcji_return retval = new pascalWalker.deklaracja_funkcji_return();
        retval.start = input.LT(1);

        CommonTree IDENT44=null;
        pascalWalker.blok_return blok45 = null;

        pascalWalker.lista_parametrow_formalnych_return lista_parametrow_formalnych46 = null;

        pascalWalker.typ_wyniku_return typ_wyniku47 = null;



        	((PScope_scope)PScope_stack.peek()).symbols = new ArrayList<Symbol>();
        	((PScope_scope)PScope_stack.peek()).name = "funkcja";
        	((PScope_scope)PScope_stack.peek()).liczbaParametrow = 1;		// identyfikator funkcji jako zmienna przechowujaca wartosc zwracana

        try {
            // /home/ravn/Workspace/pascal4j/src/pascalWalker.g:459:5: ( ^( FUNCTION IDENT ( lista_parametrow_formalnych )? typ_wyniku blok[false,$PScope::liczbaParametrow] ) -> funkcja(nazwa=$IDENT.textvars=$lista_parametrow_formalnych.stblok=$blok.stwynik=$typ_wyniku.ststack=$blok.stackvarnum=$blok.locals+$PScope::liczbaParametrowretnum=$blok.locals+$PScope::liczbaParametrow-1))
            // /home/ravn/Workspace/pascal4j/src/pascalWalker.g:459:7: ^( FUNCTION IDENT ( lista_parametrow_formalnych )? typ_wyniku blok[false,$PScope::liczbaParametrow] )
            {
            match(input,FUNCTION,FOLLOW_FUNCTION_in_deklaracja_funkcji2302); 

            match(input, Token.DOWN, null); 
            IDENT44=(CommonTree)match(input,IDENT,FOLLOW_IDENT_in_deklaracja_funkcji2304); 
            // /home/ravn/Workspace/pascal4j/src/pascalWalker.g:459:24: ( lista_parametrow_formalnych )?
            int alt31=2;
            int LA31_0 = input.LA(1);

            if ( (LA31_0==ARGDECLS) ) {
                alt31=1;
            }
            switch (alt31) {
                case 1 :
                    // /home/ravn/Workspace/pascal4j/src/pascalWalker.g:459:24: lista_parametrow_formalnych
                    {
                    pushFollow(FOLLOW_lista_parametrow_formalnych_in_deklaracja_funkcji2306);
                    lista_parametrow_formalnych46=lista_parametrow_formalnych();

                    state._fsp--;


                    }
                    break;

            }

            pushFollow(FOLLOW_typ_wyniku_in_deklaracja_funkcji2309);
            typ_wyniku47=typ_wyniku();

            state._fsp--;

            pushFollow(FOLLOW_blok_in_deklaracja_funkcji2311);
            blok45=blok(false, ((PScope_scope)PScope_stack.peek()).liczbaParametrow);

            state._fsp--;


            match(input, Token.UP, null); 

                		//System.out.println("Funkcja "+(IDENT44!=null?IDENT44.getText():null));
                		int i=PScope_stack.size()-2;
                		Symbol newSymbol=new Symbol((IDENT44!=null?IDENT44.getText():null),"funkcja",(blok45!=null?blok45.locals:0)+((PScope_scope)PScope_stack.peek()).liczbaParametrow-1);
                		if(((PScope_scope)PScope_stack.elementAt(i)).symbols.contains(newSymbol)) {
                			System.err.println("Funkcja "+newSymbol.name+" zostala juz wczesniej zdeklarowana.");
                			System.exit(1);
                		}
                		((PScope_scope)PScope_stack.elementAt(i)).symbols.add(newSymbol);
                		((PScope_scope)PScope_stack.peek()).varCount++;
                


            // TEMPLATE REWRITE
            // 469:7: -> funkcja(nazwa=$IDENT.textvars=$lista_parametrow_formalnych.stblok=$blok.stwynik=$typ_wyniku.ststack=$blok.stackvarnum=$blok.locals+$PScope::liczbaParametrowretnum=$blok.locals+$PScope::liczbaParametrow-1)
            {
                retval.st = templateLib.getInstanceOf("funkcja",
              new STAttrMap().put("nazwa", (IDENT44!=null?IDENT44.getText():null)).put("vars", (lista_parametrow_formalnych46!=null?lista_parametrow_formalnych46.st:null)).put("blok", (blok45!=null?blok45.st:null)).put("wynik", (typ_wyniku47!=null?typ_wyniku47.st:null)).put("stack", (blok45!=null?blok45.stack:0)).put("varnum", (blok45!=null?blok45.locals:0)+((PScope_scope)PScope_stack.peek()).liczbaParametrow).put("retnum", (blok45!=null?blok45.locals:0)+((PScope_scope)PScope_stack.peek()).liczbaParametrow-1));
            }


            }

        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
        }
        finally {
            PScope_stack.pop();

        }
        return retval;
    }
    // $ANTLR end "deklaracja_funkcji"

    public static class typ_wyniku_return extends TreeRuleReturnScope {
        public StringTemplate st;
        public Object getTemplate() { return st; }
        public String toString() { return st==null?null:st.toString(); }
    };

    // $ANTLR start "typ_wyniku"
    // /home/ravn/Workspace/pascal4j/src/pascalWalker.g:472:1: typ_wyniku : identyfikator_typu -> przekaz(item=$identyfikator_typu.st);
    public final pascalWalker.typ_wyniku_return typ_wyniku() throws RecognitionException {
        pascalWalker.typ_wyniku_return retval = new pascalWalker.typ_wyniku_return();
        retval.start = input.LT(1);

        pascalWalker.identyfikator_typu_return identyfikator_typu48 = null;


        try {
            // /home/ravn/Workspace/pascal4j/src/pascalWalker.g:473:5: ( identyfikator_typu -> przekaz(item=$identyfikator_typu.st))
            // /home/ravn/Workspace/pascal4j/src/pascalWalker.g:473:7: identyfikator_typu
            {
            pushFollow(FOLLOW_identyfikator_typu_in_typ_wyniku2365);
            identyfikator_typu48=identyfikator_typu();

            state._fsp--;



            // TEMPLATE REWRITE
            // 473:26: -> przekaz(item=$identyfikator_typu.st)
            {
                retval.st = templateLib.getInstanceOf("przekaz",
              new STAttrMap().put("item", (identyfikator_typu48!=null?identyfikator_typu48.st:null)));
            }


            }

        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
        }
        finally {
        }
        return retval;
    }
    // $ANTLR end "typ_wyniku"

    public static class instrukcja_return extends TreeRuleReturnScope {
        public StringTemplate st;
        public Object getTemplate() { return st; }
        public String toString() { return st==null?null:st.toString(); }
    };

    // $ANTLR start "instrukcja"
    // /home/ravn/Workspace/pascal4j/src/pascalWalker.g:476:1: instrukcja : ( ^( DWUKROPEK etykieta instrukcja_bez_etykiety ) -> instrukcjaLabel(label=$etykieta.stinstr=$instrukcja_bez_etykiety.st) | instrukcja_bez_etykiety -> przekaz(item=$instrukcja_bez_etykiety.st));
    public final pascalWalker.instrukcja_return instrukcja() throws RecognitionException {
        pascalWalker.instrukcja_return retval = new pascalWalker.instrukcja_return();
        retval.start = input.LT(1);

        pascalWalker.etykieta_return etykieta49 = null;

        pascalWalker.instrukcja_bez_etykiety_return instrukcja_bez_etykiety50 = null;

        pascalWalker.instrukcja_bez_etykiety_return instrukcja_bez_etykiety51 = null;


        try {
            // /home/ravn/Workspace/pascal4j/src/pascalWalker.g:477:5: ( ^( DWUKROPEK etykieta instrukcja_bez_etykiety ) -> instrukcjaLabel(label=$etykieta.stinstr=$instrukcja_bez_etykiety.st) | instrukcja_bez_etykiety -> przekaz(item=$instrukcja_bez_etykiety.st))
            int alt32=2;
            int LA32_0 = input.LA(1);

            if ( (LA32_0==DWUKROPEK) ) {
                alt32=1;
            }
            else if ( (LA32_0==BLOCK||LA32_0==PROC_CALL||LA32_0==CASE||LA32_0==PRZYPISANIE||LA32_0==GOTO||LA32_0==IF||LA32_0==WHILE||LA32_0==REPEAT||LA32_0==FOR||LA32_0==WITH) ) {
                alt32=2;
            }
            else {
                NoViableAltException nvae =
                    new NoViableAltException("", 32, 0, input);

                throw nvae;
            }
            switch (alt32) {
                case 1 :
                    // /home/ravn/Workspace/pascal4j/src/pascalWalker.g:477:7: ^( DWUKROPEK etykieta instrukcja_bez_etykiety )
                    {
                    match(input,DWUKROPEK,FOLLOW_DWUKROPEK_in_instrukcja2392); 

                    match(input, Token.DOWN, null); 
                    pushFollow(FOLLOW_etykieta_in_instrukcja2394);
                    etykieta49=etykieta();

                    state._fsp--;

                    pushFollow(FOLLOW_instrukcja_bez_etykiety_in_instrukcja2396);
                    instrukcja_bez_etykiety50=instrukcja_bez_etykiety();

                    state._fsp--;


                    match(input, Token.UP, null); 


                    // TEMPLATE REWRITE
                    // 477:53: -> instrukcjaLabel(label=$etykieta.stinstr=$instrukcja_bez_etykiety.st)
                    {
                        retval.st = templateLib.getInstanceOf("instrukcjaLabel",
                      new STAttrMap().put("label", (etykieta49!=null?etykieta49.st:null)).put("instr", (instrukcja_bez_etykiety50!=null?instrukcja_bez_etykiety50.st:null)));
                    }


                    }
                    break;
                case 2 :
                    // /home/ravn/Workspace/pascal4j/src/pascalWalker.g:478:7: instrukcja_bez_etykiety
                    {
                    pushFollow(FOLLOW_instrukcja_bez_etykiety_in_instrukcja2418);
                    instrukcja_bez_etykiety51=instrukcja_bez_etykiety();

                    state._fsp--;



                    // TEMPLATE REWRITE
                    // 478:31: -> przekaz(item=$instrukcja_bez_etykiety.st)
                    {
                        retval.st = templateLib.getInstanceOf("przekaz",
                      new STAttrMap().put("item", (instrukcja_bez_etykiety51!=null?instrukcja_bez_etykiety51.st:null)));
                    }


                    }
                    break;

            }
        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
        }
        finally {
        }
        return retval;
    }
    // $ANTLR end "instrukcja"

    public static class instrukcja_bez_etykiety_return extends TreeRuleReturnScope {
        public StringTemplate st;
        public Object getTemplate() { return st; }
        public String toString() { return st==null?null:st.toString(); }
    };

    // $ANTLR start "instrukcja_bez_etykiety"
    // /home/ravn/Workspace/pascal4j/src/pascalWalker.g:481:1: instrukcja_bez_etykiety : ( instrukcja_prosta -> przekaz(item=$instrukcja_prosta.st) | instrukcja_strukturalna -> przekaz(item=$instrukcja_strukturalna.st));
    public final pascalWalker.instrukcja_bez_etykiety_return instrukcja_bez_etykiety() throws RecognitionException {
        pascalWalker.instrukcja_bez_etykiety_return retval = new pascalWalker.instrukcja_bez_etykiety_return();
        retval.start = input.LT(1);

        pascalWalker.instrukcja_prosta_return instrukcja_prosta52 = null;

        pascalWalker.instrukcja_strukturalna_return instrukcja_strukturalna53 = null;


        try {
            // /home/ravn/Workspace/pascal4j/src/pascalWalker.g:482:5: ( instrukcja_prosta -> przekaz(item=$instrukcja_prosta.st) | instrukcja_strukturalna -> przekaz(item=$instrukcja_strukturalna.st))
            int alt33=2;
            int LA33_0 = input.LA(1);

            if ( (LA33_0==PROC_CALL||LA33_0==PRZYPISANIE||LA33_0==GOTO) ) {
                alt33=1;
            }
            else if ( (LA33_0==BLOCK||LA33_0==CASE||LA33_0==IF||LA33_0==WHILE||LA33_0==REPEAT||LA33_0==FOR||LA33_0==WITH) ) {
                alt33=2;
            }
            else {
                NoViableAltException nvae =
                    new NoViableAltException("", 33, 0, input);

                throw nvae;
            }
            switch (alt33) {
                case 1 :
                    // /home/ravn/Workspace/pascal4j/src/pascalWalker.g:482:7: instrukcja_prosta
                    {
                    pushFollow(FOLLOW_instrukcja_prosta_in_instrukcja_bez_etykiety2444);
                    instrukcja_prosta52=instrukcja_prosta();

                    state._fsp--;



                    // TEMPLATE REWRITE
                    // 482:25: -> przekaz(item=$instrukcja_prosta.st)
                    {
                        retval.st = templateLib.getInstanceOf("przekaz",
                      new STAttrMap().put("item", (instrukcja_prosta52!=null?instrukcja_prosta52.st:null)));
                    }


                    }
                    break;
                case 2 :
                    // /home/ravn/Workspace/pascal4j/src/pascalWalker.g:483:7: instrukcja_strukturalna
                    {
                    pushFollow(FOLLOW_instrukcja_strukturalna_in_instrukcja_bez_etykiety2461);
                    instrukcja_strukturalna53=instrukcja_strukturalna();

                    state._fsp--;



                    // TEMPLATE REWRITE
                    // 483:31: -> przekaz(item=$instrukcja_strukturalna.st)
                    {
                        retval.st = templateLib.getInstanceOf("przekaz",
                      new STAttrMap().put("item", (instrukcja_strukturalna53!=null?instrukcja_strukturalna53.st:null)));
                    }


                    }
                    break;

            }
        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
        }
        finally {
        }
        return retval;
    }
    // $ANTLR end "instrukcja_bez_etykiety"

    public static class instrukcja_prosta_return extends TreeRuleReturnScope {
        public StringTemplate st;
        public Object getTemplate() { return st; }
        public String toString() { return st==null?null:st.toString(); }
    };

    // $ANTLR start "instrukcja_prosta"
    // /home/ravn/Workspace/pascal4j/src/pascalWalker.g:486:1: instrukcja_prosta : ( instrukcja_przypisania -> przekaz(item=$instrukcja_przypisania.st) | instrukcja_procedury -> przekaz(item=$instrukcja_procedury.st) | instrukcja_skoku -> przekaz(item=$instrukcja_skoku.st));
    public final pascalWalker.instrukcja_prosta_return instrukcja_prosta() throws RecognitionException {
        pascalWalker.instrukcja_prosta_return retval = new pascalWalker.instrukcja_prosta_return();
        retval.start = input.LT(1);

        pascalWalker.instrukcja_przypisania_return instrukcja_przypisania54 = null;

        pascalWalker.instrukcja_procedury_return instrukcja_procedury55 = null;

        pascalWalker.instrukcja_skoku_return instrukcja_skoku56 = null;


        try {
            // /home/ravn/Workspace/pascal4j/src/pascalWalker.g:487:5: ( instrukcja_przypisania -> przekaz(item=$instrukcja_przypisania.st) | instrukcja_procedury -> przekaz(item=$instrukcja_procedury.st) | instrukcja_skoku -> przekaz(item=$instrukcja_skoku.st))
            int alt34=3;
            switch ( input.LA(1) ) {
            case PRZYPISANIE:
                {
                alt34=1;
                }
                break;
            case PROC_CALL:
                {
                alt34=2;
                }
                break;
            case GOTO:
                {
                alt34=3;
                }
                break;
            default:
                NoViableAltException nvae =
                    new NoViableAltException("", 34, 0, input);

                throw nvae;
            }

            switch (alt34) {
                case 1 :
                    // /home/ravn/Workspace/pascal4j/src/pascalWalker.g:487:7: instrukcja_przypisania
                    {
                    pushFollow(FOLLOW_instrukcja_przypisania_in_instrukcja_prosta2487);
                    instrukcja_przypisania54=instrukcja_przypisania();

                    state._fsp--;



                    // TEMPLATE REWRITE
                    // 487:30: -> przekaz(item=$instrukcja_przypisania.st)
                    {
                        retval.st = templateLib.getInstanceOf("przekaz",
                      new STAttrMap().put("item", (instrukcja_przypisania54!=null?instrukcja_przypisania54.st:null)));
                    }


                    }
                    break;
                case 2 :
                    // /home/ravn/Workspace/pascal4j/src/pascalWalker.g:488:7: instrukcja_procedury
                    {
                    pushFollow(FOLLOW_instrukcja_procedury_in_instrukcja_prosta2504);
                    instrukcja_procedury55=instrukcja_procedury();

                    state._fsp--;



                    // TEMPLATE REWRITE
                    // 488:28: -> przekaz(item=$instrukcja_procedury.st)
                    {
                        retval.st = templateLib.getInstanceOf("przekaz",
                      new STAttrMap().put("item", (instrukcja_procedury55!=null?instrukcja_procedury55.st:null)));
                    }


                    }
                    break;
                case 3 :
                    // /home/ravn/Workspace/pascal4j/src/pascalWalker.g:489:7: instrukcja_skoku
                    {
                    pushFollow(FOLLOW_instrukcja_skoku_in_instrukcja_prosta2521);
                    instrukcja_skoku56=instrukcja_skoku();

                    state._fsp--;



                    // TEMPLATE REWRITE
                    // 489:24: -> przekaz(item=$instrukcja_skoku.st)
                    {
                        retval.st = templateLib.getInstanceOf("przekaz",
                      new STAttrMap().put("item", (instrukcja_skoku56!=null?instrukcja_skoku56.st:null)));
                    }


                    }
                    break;

            }
        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
        }
        finally {
        }
        return retval;
    }
    // $ANTLR end "instrukcja_prosta"

    public static class instrukcja_przypisania_return extends TreeRuleReturnScope {
        public StringTemplate st;
        public Object getTemplate() { return st; }
        public String toString() { return st==null?null:st.toString(); }
    };

    // $ANTLR start "instrukcja_przypisania"
    // /home/ravn/Workspace/pascal4j/src/pascalWalker.g:492:1: instrukcja_przypisania : ^( PRZYPISANIE zmienna wyrazenie ) -> przypisanie(var=$zmienna.glowny ? $zmienna.name : $zmienna.stval=$wyrazenie.stvarnum=getSymbol($zmienna.name,\"zmienna\").countstring=$wyrazenie.typ==3 ? 3 : nullfloat=$wyrazenie.typ==2 ? 2 : nullclassname=$zmienna.glowny ? programName : null);
    public final pascalWalker.instrukcja_przypisania_return instrukcja_przypisania() throws RecognitionException {
        pascalWalker.instrukcja_przypisania_return retval = new pascalWalker.instrukcja_przypisania_return();
        retval.start = input.LT(1);

        pascalWalker.zmienna_return zmienna57 = null;

        pascalWalker.wyrazenie_return wyrazenie58 = null;


        try {
            // /home/ravn/Workspace/pascal4j/src/pascalWalker.g:493:5: ( ^( PRZYPISANIE zmienna wyrazenie ) -> przypisanie(var=$zmienna.glowny ? $zmienna.name : $zmienna.stval=$wyrazenie.stvarnum=getSymbol($zmienna.name,\"zmienna\").countstring=$wyrazenie.typ==3 ? 3 : nullfloat=$wyrazenie.typ==2 ? 2 : nullclassname=$zmienna.glowny ? programName : null))
            // /home/ravn/Workspace/pascal4j/src/pascalWalker.g:493:7: ^( PRZYPISANIE zmienna wyrazenie )
            {
            match(input,PRZYPISANIE,FOLLOW_PRZYPISANIE_in_instrukcja_przypisania2548); 

            match(input, Token.DOWN, null); 
            pushFollow(FOLLOW_zmienna_in_instrukcja_przypisania2550);
            zmienna57=zmienna();

            state._fsp--;

            pushFollow(FOLLOW_wyrazenie_in_instrukcja_przypisania2552);
            wyrazenie58=wyrazenie();

            state._fsp--;


            match(input, Token.UP, null); 


            // TEMPLATE REWRITE
            // 493:40: -> przypisanie(var=$zmienna.glowny ? $zmienna.name : $zmienna.stval=$wyrazenie.stvarnum=getSymbol($zmienna.name,\"zmienna\").countstring=$wyrazenie.typ==3 ? 3 : nullfloat=$wyrazenie.typ==2 ? 2 : nullclassname=$zmienna.glowny ? programName : null)
            {
                retval.st = templateLib.getInstanceOf("przypisanie",
              new STAttrMap().put("var", (zmienna57!=null?zmienna57.glowny:false) ? (zmienna57!=null?zmienna57.name:null) : (zmienna57!=null?zmienna57.st:null)).put("val", (wyrazenie58!=null?wyrazenie58.st:null)).put("varnum", getSymbol((zmienna57!=null?zmienna57.name:null),"zmienna").count).put("string", (wyrazenie58!=null?wyrazenie58.typ:0)==3 ? 3 : null).put("float", (wyrazenie58!=null?wyrazenie58.typ:0)==2 ? 2 : null).put("classname", (zmienna57!=null?zmienna57.glowny:false) ? programName : null));
            }


            }

        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
        }
        finally {
        }
        return retval;
    }
    // $ANTLR end "instrukcja_przypisania"

    public static class zmienna_return extends TreeRuleReturnScope {
        public String name;
        public int typ;
        public boolean glowny;
        public StringTemplate st;
        public Object getTemplate() { return st; }
        public String toString() { return st==null?null:st.toString(); }
    };

    // $ANTLR start "zmienna"
    // /home/ravn/Workspace/pascal4j/src/pascalWalker.g:496:1: zmienna returns [String name,int typ,boolean glowny] : ( ^( LNAWIASKWADRATOWY a= zmienna (wyr+= wyrazenie )+ ) -> tablica(name=$a.stindeksy=$wyr) | ^( LNAWIAS2 a= zmienna (wyr+= wyrazenie )+ ) -> tablica(name=$a.stindeksy=$wyr) | ^( KROPKA a= zmienna IDENT ) -> poleRekodu(rekord=$a.stpole=$IDENT.text) | ^( WSKAZNIK a= zmienna ) -> wskaznik(name=$a.st) | IDENT -> variable(name=$IDENT.textvarnum=sym.countstring=$typ==3 ? \"str\" : nullfloat=$typ==2 ? \"float\" : nullglowny=cosclassname=$glowny ? programName : null));
    public final pascalWalker.zmienna_return zmienna() throws RecognitionException {
        pascalWalker.zmienna_return retval = new pascalWalker.zmienna_return();
        retval.start = input.LT(1);

        CommonTree IDENT59=null;
        CommonTree IDENT60=null;
        List list_wyr=null;
        pascalWalker.zmienna_return a = null;

        pascalWalker.wyrazenie_return wyr = null;
         wyr = null;
        try {
            // /home/ravn/Workspace/pascal4j/src/pascalWalker.g:497:5: ( ^( LNAWIASKWADRATOWY a= zmienna (wyr+= wyrazenie )+ ) -> tablica(name=$a.stindeksy=$wyr) | ^( LNAWIAS2 a= zmienna (wyr+= wyrazenie )+ ) -> tablica(name=$a.stindeksy=$wyr) | ^( KROPKA a= zmienna IDENT ) -> poleRekodu(rekord=$a.stpole=$IDENT.text) | ^( WSKAZNIK a= zmienna ) -> wskaznik(name=$a.st) | IDENT -> variable(name=$IDENT.textvarnum=sym.countstring=$typ==3 ? \"str\" : nullfloat=$typ==2 ? \"float\" : nullglowny=cosclassname=$glowny ? programName : null))
            int alt37=5;
            switch ( input.LA(1) ) {
            case LNAWIASKWADRATOWY:
                {
                alt37=1;
                }
                break;
            case LNAWIAS2:
                {
                alt37=2;
                }
                break;
            case KROPKA:
                {
                alt37=3;
                }
                break;
            case WSKAZNIK:
                {
                alt37=4;
                }
                break;
            case IDENT:
                {
                alt37=5;
                }
                break;
            default:
                NoViableAltException nvae =
                    new NoViableAltException("", 37, 0, input);

                throw nvae;
            }

            switch (alt37) {
                case 1 :
                    // /home/ravn/Workspace/pascal4j/src/pascalWalker.g:497:7: ^( LNAWIASKWADRATOWY a= zmienna (wyr+= wyrazenie )+ )
                    {
                    match(input,LNAWIASKWADRATOWY,FOLLOW_LNAWIASKWADRATOWY_in_zmienna2604); 

                    match(input, Token.DOWN, null); 
                    pushFollow(FOLLOW_zmienna_in_zmienna2608);
                    a=zmienna();

                    state._fsp--;

                    // /home/ravn/Workspace/pascal4j/src/pascalWalker.g:497:40: (wyr+= wyrazenie )+
                    int cnt35=0;
                    loop35:
                    do {
                        int alt35=2;
                        int LA35_0 = input.LA(1);

                        if ( (LA35_0==FUNC_CALL||LA35_0==KROPKA||LA35_0==IDENT||(LA35_0>=ROWNOSC && LA35_0<=STRING_LITERAL)||LA35_0==LNAWIASKWADRATOWY||LA35_0==LNAWIAS2||LA35_0==WSKAZNIK||(LA35_0>=NIEROWNOSC && LA35_0<=NIL)) ) {
                            alt35=1;
                        }


                        switch (alt35) {
                    	case 1 :
                    	    // /home/ravn/Workspace/pascal4j/src/pascalWalker.g:497:40: wyr+= wyrazenie
                    	    {
                    	    pushFollow(FOLLOW_wyrazenie_in_zmienna2612);
                    	    wyr=wyrazenie();

                    	    state._fsp--;

                    	    if (list_wyr==null) list_wyr=new ArrayList();
                    	    list_wyr.add(wyr.getTemplate());


                    	    }
                    	    break;

                    	default :
                    	    if ( cnt35 >= 1 ) break loop35;
                                EarlyExitException eee =
                                    new EarlyExitException(35, input);
                                throw eee;
                        }
                        cnt35++;
                    } while (true);


                    match(input, Token.UP, null); 
                    retval.name =(a!=null?a.name:null);


                    // TEMPLATE REWRITE
                    // 497:71: -> tablica(name=$a.stindeksy=$wyr)
                    {
                        retval.st = templateLib.getInstanceOf("tablica",
                      new STAttrMap().put("name", (a!=null?a.st:null)).put("indeksy", list_wyr));
                    }


                    }
                    break;
                case 2 :
                    // /home/ravn/Workspace/pascal4j/src/pascalWalker.g:498:7: ^( LNAWIAS2 a= zmienna (wyr+= wyrazenie )+ )
                    {
                    match(input,LNAWIAS2,FOLLOW_LNAWIAS2_in_zmienna2638); 

                    match(input, Token.DOWN, null); 
                    pushFollow(FOLLOW_zmienna_in_zmienna2642);
                    a=zmienna();

                    state._fsp--;

                    // /home/ravn/Workspace/pascal4j/src/pascalWalker.g:498:31: (wyr+= wyrazenie )+
                    int cnt36=0;
                    loop36:
                    do {
                        int alt36=2;
                        int LA36_0 = input.LA(1);

                        if ( (LA36_0==FUNC_CALL||LA36_0==KROPKA||LA36_0==IDENT||(LA36_0>=ROWNOSC && LA36_0<=STRING_LITERAL)||LA36_0==LNAWIASKWADRATOWY||LA36_0==LNAWIAS2||LA36_0==WSKAZNIK||(LA36_0>=NIEROWNOSC && LA36_0<=NIL)) ) {
                            alt36=1;
                        }


                        switch (alt36) {
                    	case 1 :
                    	    // /home/ravn/Workspace/pascal4j/src/pascalWalker.g:498:31: wyr+= wyrazenie
                    	    {
                    	    pushFollow(FOLLOW_wyrazenie_in_zmienna2646);
                    	    wyr=wyrazenie();

                    	    state._fsp--;

                    	    if (list_wyr==null) list_wyr=new ArrayList();
                    	    list_wyr.add(wyr.getTemplate());


                    	    }
                    	    break;

                    	default :
                    	    if ( cnt36 >= 1 ) break loop36;
                                EarlyExitException eee =
                                    new EarlyExitException(36, input);
                                throw eee;
                        }
                        cnt36++;
                    } while (true);


                    match(input, Token.UP, null); 
                    retval.name =(a!=null?a.name:null);


                    // TEMPLATE REWRITE
                    // 498:62: -> tablica(name=$a.stindeksy=$wyr)
                    {
                        retval.st = templateLib.getInstanceOf("tablica",
                      new STAttrMap().put("name", (a!=null?a.st:null)).put("indeksy", list_wyr));
                    }


                    }
                    break;
                case 3 :
                    // /home/ravn/Workspace/pascal4j/src/pascalWalker.g:499:7: ^( KROPKA a= zmienna IDENT )
                    {
                    match(input,KROPKA,FOLLOW_KROPKA_in_zmienna2672); 

                    match(input, Token.DOWN, null); 
                    pushFollow(FOLLOW_zmienna_in_zmienna2676);
                    a=zmienna();

                    state._fsp--;

                    IDENT59=(CommonTree)match(input,IDENT,FOLLOW_IDENT_in_zmienna2678); 

                    match(input, Token.UP, null); 
                    retval.name =(a!=null?a.name:null);


                    // TEMPLATE REWRITE
                    // 499:50: -> poleRekodu(rekord=$a.stpole=$IDENT.text)
                    {
                        retval.st = templateLib.getInstanceOf("poleRekodu",
                      new STAttrMap().put("rekord", (a!=null?a.st:null)).put("pole", (IDENT59!=null?IDENT59.getText():null)));
                    }


                    }
                    break;
                case 4 :
                    // /home/ravn/Workspace/pascal4j/src/pascalWalker.g:500:7: ^( WSKAZNIK a= zmienna )
                    {
                    match(input,WSKAZNIK,FOLLOW_WSKAZNIK_in_zmienna2703); 

                    match(input, Token.DOWN, null); 
                    pushFollow(FOLLOW_zmienna_in_zmienna2707);
                    a=zmienna();

                    state._fsp--;


                    match(input, Token.UP, null); 
                    retval.name =(a!=null?a.name:null);


                    // TEMPLATE REWRITE
                    // 500:46: -> wskaznik(name=$a.st)
                    {
                        retval.st = templateLib.getInstanceOf("wskaznik",
                      new STAttrMap().put("name", (a!=null?a.st:null)));
                    }


                    }
                    break;
                case 5 :
                    // /home/ravn/Workspace/pascal4j/src/pascalWalker.g:501:7: IDENT
                    {
                    IDENT60=(CommonTree)match(input,IDENT,FOLLOW_IDENT_in_zmienna2727); 

                        	Symbol sym0=new Symbol((IDENT60!=null?IDENT60.getText():null), "zmienna");
                    	if ( !isDefined( sym0 ) && !isDefined(new Symbol((IDENT60!=null?IDENT60.getText():null), "funkcja")) ) {
                    		System.err.println("niezdefiniowana zmienna: "+(IDENT60!=null?IDENT60.getText():null));
                    		System.exit(1);
                    	}
                    	Symbol sym=getSymbol(sym0);
                    	String cos=null;
                    	if(sym.glowny) {
                    		cos="glowny";
                    	}
                    	retval.name =(IDENT60!=null?IDENT60.getText():null);
                    	retval.typ =sym.retval;
                    	retval.glowny =sym.glowny;
                        


                    // TEMPLATE REWRITE
                    // 515:7: -> variable(name=$IDENT.textvarnum=sym.countstring=$typ==3 ? \"str\" : nullfloat=$typ==2 ? \"float\" : nullglowny=cosclassname=$glowny ? programName : null)
                    {
                        retval.st = templateLib.getInstanceOf("variable",
                      new STAttrMap().put("name", (IDENT60!=null?IDENT60.getText():null)).put("varnum", sym.count).put("string", retval.typ==3 ? "str" : null).put("float", retval.typ==2 ? "float" : null).put("glowny", cos).put("classname", retval.glowny ? programName : null));
                    }


                    }
                    break;

            }
        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
        }
        finally {
        }
        return retval;
    }
    // $ANTLR end "zmienna"

    public static class wyrazenie_return extends TreeRuleReturnScope {
        public int typ;
        public StringTemplate st;
        public Object getTemplate() { return st; }
        public String toString() { return st==null?null:st.toString(); }
    };

    // $ANTLR start "wyrazenie"
    // /home/ravn/Workspace/pascal4j/src/pascalWalker.g:518:1: wyrazenie returns [int typ] : ( ^( ROWNOSC a= wyrazenie b= wyrazenie ) -> rownosc(wyr1=$a.stwyr2=$b.stnum=$PScope::eqCount++float=$a.typ==2 && $b.typ==2 ? \"float\" : null) | ^( NIEROWNOSC a= wyrazenie b= wyrazenie ) -> nierownosc(wyr1=$a.stwyr2=$b.stnum=$PScope::neCount++float=$a.typ==2 && $b.typ==2 ? \"float\" : null) | ^( MNIEJSZY a= wyrazenie b= wyrazenie ) -> mniejszy(wyr1=$a.stwyr2=$b.stnum=$PScope::ltCount++float=$a.typ==2 && $b.typ==2 ? \"float\" : null) | ^( MNIEJSZYLUBROWNY a= wyrazenie b= wyrazenie ) -> mniejszylubrowny(wyr1=$a.stwyr2=$b.stnum=$PScope::leCount++float=$a.typ==2 && $b.typ==2 ? \"float\" : null) | ^( WIEKSZY a= wyrazenie b= wyrazenie ) -> wiekszy(wyr1=$a.stwyr2=$b.stnum=$PScope::gtCount++float=$a.typ==2 && $b.typ==2 ? \"float\" : null) | ^( WIEKSZYLUBROWNY a= wyrazenie b= wyrazenie ) -> wiekszylubrowny(wyr1=$a.stwyr2=$b.stnum=$PScope::geCount++float=$a.typ==2 && $b.typ==2 ? \"float\" : null) | ^( IN a= wyrazenie b= wyrazenie ) -> in(wyr1=$a.stwyr2=$b.st) | ^( PLUS a= wyrazenie (b= wyrazenie )? ) -> plus(wyr1=$a.stwyr2=$b.stfloat=$a.typ==2 && $b.typ==2 ? \"float\" : null) | ^( MINUS a= wyrazenie (b= wyrazenie )? ) -> minus(wyr1=$a.stwyr2=$b.stfloat=$a.typ==2 && $b.typ==2 ? \"float\" : null) | ^( OR a= wyrazenie b= wyrazenie ) -> or(wyr1=$a.stwyr2=$b.st) | ^( GWIAZDKA a= wyrazenie b= wyrazenie ) -> gwiazdka(wyr1=$a.stwyr2=$b.stfloat=$a.typ==2 && $b.typ==2 ? \"float\" : null) | ^( SLASH a= wyrazenie b= wyrazenie ) -> slash(wyr1=$a.stwyr2=$b.stfloat=$a.typ==2 && $b.typ==2 ? \"float\" : null) | ^( DIV a= wyrazenie b= wyrazenie ) -> div(wyr1=$a.stwyr2=$b.stfloat=$a.typ==2 && $b.typ==2 ? \"float\" : null) | ^( MOD a= wyrazenie b= wyrazenie ) -> mod(wyr1=$a.stwyr2=$b.st) | ^( AND a= wyrazenie b= wyrazenie ) -> and(wyr1=$a.stwyr2=$b.st) | ^( NOT a= wyrazenie ) -> not(wyr1=$a.st) | zmienna -> przekaz(item=$zmienna.st) | nazewnik_funkcji -> przekaz(item=$nazewnik_funkcji.st) | NUM_INT -> num(val=$NUM_INT.text) | NUM_REAL -> num(val=$NUM_REAL.text) | napis -> przekaz(item=$napis.st) | NIL -> przekaz(item=$NIL.text));
    public final pascalWalker.wyrazenie_return wyrazenie() throws RecognitionException {
        pascalWalker.wyrazenie_return retval = new pascalWalker.wyrazenie_return();
        retval.start = input.LT(1);

        CommonTree NUM_INT63=null;
        CommonTree NUM_REAL64=null;
        CommonTree NIL66=null;
        pascalWalker.wyrazenie_return a = null;

        pascalWalker.wyrazenie_return b = null;

        pascalWalker.zmienna_return zmienna61 = null;

        pascalWalker.nazewnik_funkcji_return nazewnik_funkcji62 = null;

        pascalWalker.napis_return napis65 = null;


        try {
            // /home/ravn/Workspace/pascal4j/src/pascalWalker.g:519:5: ( ^( ROWNOSC a= wyrazenie b= wyrazenie ) -> rownosc(wyr1=$a.stwyr2=$b.stnum=$PScope::eqCount++float=$a.typ==2 && $b.typ==2 ? \"float\" : null) | ^( NIEROWNOSC a= wyrazenie b= wyrazenie ) -> nierownosc(wyr1=$a.stwyr2=$b.stnum=$PScope::neCount++float=$a.typ==2 && $b.typ==2 ? \"float\" : null) | ^( MNIEJSZY a= wyrazenie b= wyrazenie ) -> mniejszy(wyr1=$a.stwyr2=$b.stnum=$PScope::ltCount++float=$a.typ==2 && $b.typ==2 ? \"float\" : null) | ^( MNIEJSZYLUBROWNY a= wyrazenie b= wyrazenie ) -> mniejszylubrowny(wyr1=$a.stwyr2=$b.stnum=$PScope::leCount++float=$a.typ==2 && $b.typ==2 ? \"float\" : null) | ^( WIEKSZY a= wyrazenie b= wyrazenie ) -> wiekszy(wyr1=$a.stwyr2=$b.stnum=$PScope::gtCount++float=$a.typ==2 && $b.typ==2 ? \"float\" : null) | ^( WIEKSZYLUBROWNY a= wyrazenie b= wyrazenie ) -> wiekszylubrowny(wyr1=$a.stwyr2=$b.stnum=$PScope::geCount++float=$a.typ==2 && $b.typ==2 ? \"float\" : null) | ^( IN a= wyrazenie b= wyrazenie ) -> in(wyr1=$a.stwyr2=$b.st) | ^( PLUS a= wyrazenie (b= wyrazenie )? ) -> plus(wyr1=$a.stwyr2=$b.stfloat=$a.typ==2 && $b.typ==2 ? \"float\" : null) | ^( MINUS a= wyrazenie (b= wyrazenie )? ) -> minus(wyr1=$a.stwyr2=$b.stfloat=$a.typ==2 && $b.typ==2 ? \"float\" : null) | ^( OR a= wyrazenie b= wyrazenie ) -> or(wyr1=$a.stwyr2=$b.st) | ^( GWIAZDKA a= wyrazenie b= wyrazenie ) -> gwiazdka(wyr1=$a.stwyr2=$b.stfloat=$a.typ==2 && $b.typ==2 ? \"float\" : null) | ^( SLASH a= wyrazenie b= wyrazenie ) -> slash(wyr1=$a.stwyr2=$b.stfloat=$a.typ==2 && $b.typ==2 ? \"float\" : null) | ^( DIV a= wyrazenie b= wyrazenie ) -> div(wyr1=$a.stwyr2=$b.stfloat=$a.typ==2 && $b.typ==2 ? \"float\" : null) | ^( MOD a= wyrazenie b= wyrazenie ) -> mod(wyr1=$a.stwyr2=$b.st) | ^( AND a= wyrazenie b= wyrazenie ) -> and(wyr1=$a.stwyr2=$b.st) | ^( NOT a= wyrazenie ) -> not(wyr1=$a.st) | zmienna -> przekaz(item=$zmienna.st) | nazewnik_funkcji -> przekaz(item=$nazewnik_funkcji.st) | NUM_INT -> num(val=$NUM_INT.text) | NUM_REAL -> num(val=$NUM_REAL.text) | napis -> przekaz(item=$napis.st) | NIL -> przekaz(item=$NIL.text))
            int alt40=22;
            switch ( input.LA(1) ) {
            case ROWNOSC:
                {
                alt40=1;
                }
                break;
            case NIEROWNOSC:
                {
                alt40=2;
                }
                break;
            case MNIEJSZY:
                {
                alt40=3;
                }
                break;
            case MNIEJSZYLUBROWNY:
                {
                alt40=4;
                }
                break;
            case WIEKSZY:
                {
                alt40=5;
                }
                break;
            case WIEKSZYLUBROWNY:
                {
                alt40=6;
                }
                break;
            case IN:
                {
                alt40=7;
                }
                break;
            case PLUS:
                {
                alt40=8;
                }
                break;
            case MINUS:
                {
                alt40=9;
                }
                break;
            case OR:
                {
                alt40=10;
                }
                break;
            case GWIAZDKA:
                {
                alt40=11;
                }
                break;
            case SLASH:
                {
                alt40=12;
                }
                break;
            case DIV:
                {
                alt40=13;
                }
                break;
            case MOD:
                {
                alt40=14;
                }
                break;
            case AND:
                {
                alt40=15;
                }
                break;
            case NOT:
                {
                alt40=16;
                }
                break;
            case KROPKA:
            case IDENT:
            case LNAWIASKWADRATOWY:
            case LNAWIAS2:
            case WSKAZNIK:
                {
                alt40=17;
                }
                break;
            case FUNC_CALL:
                {
                alt40=18;
                }
                break;
            case NUM_INT:
                {
                alt40=19;
                }
                break;
            case NUM_REAL:
                {
                alt40=20;
                }
                break;
            case STRING_LITERAL:
                {
                alt40=21;
                }
                break;
            case NIL:
                {
                alt40=22;
                }
                break;
            default:
                NoViableAltException nvae =
                    new NoViableAltException("", 40, 0, input);

                throw nvae;
            }

            switch (alt40) {
                case 1 :
                    // /home/ravn/Workspace/pascal4j/src/pascalWalker.g:519:7: ^( ROWNOSC a= wyrazenie b= wyrazenie )
                    {
                    match(input,ROWNOSC,FOLLOW_ROWNOSC_in_wyrazenie2780); 

                    match(input, Token.DOWN, null); 
                    pushFollow(FOLLOW_wyrazenie_in_wyrazenie2784);
                    a=wyrazenie();

                    state._fsp--;

                    pushFollow(FOLLOW_wyrazenie_in_wyrazenie2788);
                    b=wyrazenie();

                    state._fsp--;


                    match(input, Token.UP, null); 
                    retval.typ =1;


                    // TEMPLATE REWRITE
                    // 519:52: -> rownosc(wyr1=$a.stwyr2=$b.stnum=$PScope::eqCount++float=$a.typ==2 && $b.typ==2 ? \"float\" : null)
                    {
                        retval.st = templateLib.getInstanceOf("rownosc",
                      new STAttrMap().put("wyr1", (a!=null?a.st:null)).put("wyr2", (b!=null?b.st:null)).put("num", ((PScope_scope)PScope_stack.peek()).eqCount++).put("float", (a!=null?a.typ:0)==2 && (b!=null?b.typ:0)==2 ? "float" : null));
                    }


                    }
                    break;
                case 2 :
                    // /home/ravn/Workspace/pascal4j/src/pascalWalker.g:520:7: ^( NIEROWNOSC a= wyrazenie b= wyrazenie )
                    {
                    match(input,NIEROWNOSC,FOLLOW_NIEROWNOSC_in_wyrazenie2821); 

                    match(input, Token.DOWN, null); 
                    pushFollow(FOLLOW_wyrazenie_in_wyrazenie2825);
                    a=wyrazenie();

                    state._fsp--;

                    pushFollow(FOLLOW_wyrazenie_in_wyrazenie2829);
                    b=wyrazenie();

                    state._fsp--;


                    match(input, Token.UP, null); 
                    retval.typ =1;


                    // TEMPLATE REWRITE
                    // 520:55: -> nierownosc(wyr1=$a.stwyr2=$b.stnum=$PScope::neCount++float=$a.typ==2 && $b.typ==2 ? \"float\" : null)
                    {
                        retval.st = templateLib.getInstanceOf("nierownosc",
                      new STAttrMap().put("wyr1", (a!=null?a.st:null)).put("wyr2", (b!=null?b.st:null)).put("num", ((PScope_scope)PScope_stack.peek()).neCount++).put("float", (a!=null?a.typ:0)==2 && (b!=null?b.typ:0)==2 ? "float" : null));
                    }


                    }
                    break;
                case 3 :
                    // /home/ravn/Workspace/pascal4j/src/pascalWalker.g:521:7: ^( MNIEJSZY a= wyrazenie b= wyrazenie )
                    {
                    match(input,MNIEJSZY,FOLLOW_MNIEJSZY_in_wyrazenie2862); 

                    match(input, Token.DOWN, null); 
                    pushFollow(FOLLOW_wyrazenie_in_wyrazenie2866);
                    a=wyrazenie();

                    state._fsp--;

                    pushFollow(FOLLOW_wyrazenie_in_wyrazenie2870);
                    b=wyrazenie();

                    state._fsp--;


                    match(input, Token.UP, null); 
                    retval.typ =1;


                    // TEMPLATE REWRITE
                    // 521:53: -> mniejszy(wyr1=$a.stwyr2=$b.stnum=$PScope::ltCount++float=$a.typ==2 && $b.typ==2 ? \"float\" : null)
                    {
                        retval.st = templateLib.getInstanceOf("mniejszy",
                      new STAttrMap().put("wyr1", (a!=null?a.st:null)).put("wyr2", (b!=null?b.st:null)).put("num", ((PScope_scope)PScope_stack.peek()).ltCount++).put("float", (a!=null?a.typ:0)==2 && (b!=null?b.typ:0)==2 ? "float" : null));
                    }


                    }
                    break;
                case 4 :
                    // /home/ravn/Workspace/pascal4j/src/pascalWalker.g:522:7: ^( MNIEJSZYLUBROWNY a= wyrazenie b= wyrazenie )
                    {
                    match(input,MNIEJSZYLUBROWNY,FOLLOW_MNIEJSZYLUBROWNY_in_wyrazenie2903); 

                    match(input, Token.DOWN, null); 
                    pushFollow(FOLLOW_wyrazenie_in_wyrazenie2907);
                    a=wyrazenie();

                    state._fsp--;

                    pushFollow(FOLLOW_wyrazenie_in_wyrazenie2911);
                    b=wyrazenie();

                    state._fsp--;


                    match(input, Token.UP, null); 
                    retval.typ =1;


                    // TEMPLATE REWRITE
                    // 522:61: -> mniejszylubrowny(wyr1=$a.stwyr2=$b.stnum=$PScope::leCount++float=$a.typ==2 && $b.typ==2 ? \"float\" : null)
                    {
                        retval.st = templateLib.getInstanceOf("mniejszylubrowny",
                      new STAttrMap().put("wyr1", (a!=null?a.st:null)).put("wyr2", (b!=null?b.st:null)).put("num", ((PScope_scope)PScope_stack.peek()).leCount++).put("float", (a!=null?a.typ:0)==2 && (b!=null?b.typ:0)==2 ? "float" : null));
                    }


                    }
                    break;
                case 5 :
                    // /home/ravn/Workspace/pascal4j/src/pascalWalker.g:523:7: ^( WIEKSZY a= wyrazenie b= wyrazenie )
                    {
                    match(input,WIEKSZY,FOLLOW_WIEKSZY_in_wyrazenie2944); 

                    match(input, Token.DOWN, null); 
                    pushFollow(FOLLOW_wyrazenie_in_wyrazenie2948);
                    a=wyrazenie();

                    state._fsp--;

                    pushFollow(FOLLOW_wyrazenie_in_wyrazenie2952);
                    b=wyrazenie();

                    state._fsp--;


                    match(input, Token.UP, null); 
                    retval.typ =1;


                    // TEMPLATE REWRITE
                    // 523:52: -> wiekszy(wyr1=$a.stwyr2=$b.stnum=$PScope::gtCount++float=$a.typ==2 && $b.typ==2 ? \"float\" : null)
                    {
                        retval.st = templateLib.getInstanceOf("wiekszy",
                      new STAttrMap().put("wyr1", (a!=null?a.st:null)).put("wyr2", (b!=null?b.st:null)).put("num", ((PScope_scope)PScope_stack.peek()).gtCount++).put("float", (a!=null?a.typ:0)==2 && (b!=null?b.typ:0)==2 ? "float" : null));
                    }


                    }
                    break;
                case 6 :
                    // /home/ravn/Workspace/pascal4j/src/pascalWalker.g:524:7: ^( WIEKSZYLUBROWNY a= wyrazenie b= wyrazenie )
                    {
                    match(input,WIEKSZYLUBROWNY,FOLLOW_WIEKSZYLUBROWNY_in_wyrazenie2985); 

                    match(input, Token.DOWN, null); 
                    pushFollow(FOLLOW_wyrazenie_in_wyrazenie2989);
                    a=wyrazenie();

                    state._fsp--;

                    pushFollow(FOLLOW_wyrazenie_in_wyrazenie2993);
                    b=wyrazenie();

                    state._fsp--;


                    match(input, Token.UP, null); 
                    retval.typ =1;


                    // TEMPLATE REWRITE
                    // 524:60: -> wiekszylubrowny(wyr1=$a.stwyr2=$b.stnum=$PScope::geCount++float=$a.typ==2 && $b.typ==2 ? \"float\" : null)
                    {
                        retval.st = templateLib.getInstanceOf("wiekszylubrowny",
                      new STAttrMap().put("wyr1", (a!=null?a.st:null)).put("wyr2", (b!=null?b.st:null)).put("num", ((PScope_scope)PScope_stack.peek()).geCount++).put("float", (a!=null?a.typ:0)==2 && (b!=null?b.typ:0)==2 ? "float" : null));
                    }


                    }
                    break;
                case 7 :
                    // /home/ravn/Workspace/pascal4j/src/pascalWalker.g:525:7: ^( IN a= wyrazenie b= wyrazenie )
                    {
                    match(input,IN,FOLLOW_IN_in_wyrazenie3026); 

                    match(input, Token.DOWN, null); 
                    pushFollow(FOLLOW_wyrazenie_in_wyrazenie3030);
                    a=wyrazenie();

                    state._fsp--;

                    pushFollow(FOLLOW_wyrazenie_in_wyrazenie3034);
                    b=wyrazenie();

                    state._fsp--;


                    match(input, Token.UP, null); 
                    retval.typ =1;


                    // TEMPLATE REWRITE
                    // 525:47: -> in(wyr1=$a.stwyr2=$b.st)
                    {
                        retval.st = templateLib.getInstanceOf("in",
                      new STAttrMap().put("wyr1", (a!=null?a.st:null)).put("wyr2", (b!=null?b.st:null)));
                    }


                    }
                    break;
                case 8 :
                    // /home/ravn/Workspace/pascal4j/src/pascalWalker.g:526:7: ^( PLUS a= wyrazenie (b= wyrazenie )? )
                    {
                    match(input,PLUS,FOLLOW_PLUS_in_wyrazenie3059); 

                    match(input, Token.DOWN, null); 
                    pushFollow(FOLLOW_wyrazenie_in_wyrazenie3063);
                    a=wyrazenie();

                    state._fsp--;

                    // /home/ravn/Workspace/pascal4j/src/pascalWalker.g:526:27: (b= wyrazenie )?
                    int alt38=2;
                    int LA38_0 = input.LA(1);

                    if ( (LA38_0==FUNC_CALL||LA38_0==KROPKA||LA38_0==IDENT||(LA38_0>=ROWNOSC && LA38_0<=STRING_LITERAL)||LA38_0==LNAWIASKWADRATOWY||LA38_0==LNAWIAS2||LA38_0==WSKAZNIK||(LA38_0>=NIEROWNOSC && LA38_0<=NIL)) ) {
                        alt38=1;
                    }
                    switch (alt38) {
                        case 1 :
                            // /home/ravn/Workspace/pascal4j/src/pascalWalker.g:526:27: b= wyrazenie
                            {
                            pushFollow(FOLLOW_wyrazenie_in_wyrazenie3067);
                            b=wyrazenie();

                            state._fsp--;


                            }
                            break;

                    }


                    match(input, Token.UP, null); 
                    retval.typ =najwiekszy((a!=null?a.typ:0),(b!=null?b.typ:0));


                    // TEMPLATE REWRITE
                    // 526:74: -> plus(wyr1=$a.stwyr2=$b.stfloat=$a.typ==2 && $b.typ==2 ? \"float\" : null)
                    {
                        retval.st = templateLib.getInstanceOf("plus",
                      new STAttrMap().put("wyr1", (a!=null?a.st:null)).put("wyr2", (b!=null?b.st:null)).put("float", (a!=null?a.typ:0)==2 && (b!=null?b.typ:0)==2 ? "float" : null));
                    }


                    }
                    break;
                case 9 :
                    // /home/ravn/Workspace/pascal4j/src/pascalWalker.g:527:7: ^( MINUS a= wyrazenie (b= wyrazenie )? )
                    {
                    match(input,MINUS,FOLLOW_MINUS_in_wyrazenie3097); 

                    match(input, Token.DOWN, null); 
                    pushFollow(FOLLOW_wyrazenie_in_wyrazenie3101);
                    a=wyrazenie();

                    state._fsp--;

                    // /home/ravn/Workspace/pascal4j/src/pascalWalker.g:527:28: (b= wyrazenie )?
                    int alt39=2;
                    int LA39_0 = input.LA(1);

                    if ( (LA39_0==FUNC_CALL||LA39_0==KROPKA||LA39_0==IDENT||(LA39_0>=ROWNOSC && LA39_0<=STRING_LITERAL)||LA39_0==LNAWIASKWADRATOWY||LA39_0==LNAWIAS2||LA39_0==WSKAZNIK||(LA39_0>=NIEROWNOSC && LA39_0<=NIL)) ) {
                        alt39=1;
                    }
                    switch (alt39) {
                        case 1 :
                            // /home/ravn/Workspace/pascal4j/src/pascalWalker.g:527:28: b= wyrazenie
                            {
                            pushFollow(FOLLOW_wyrazenie_in_wyrazenie3105);
                            b=wyrazenie();

                            state._fsp--;


                            }
                            break;

                    }


                    match(input, Token.UP, null); 
                    retval.typ =najwiekszy((a!=null?a.typ:0),(b!=null?b.typ:0));


                    // TEMPLATE REWRITE
                    // 527:75: -> minus(wyr1=$a.stwyr2=$b.stfloat=$a.typ==2 && $b.typ==2 ? \"float\" : null)
                    {
                        retval.st = templateLib.getInstanceOf("minus",
                      new STAttrMap().put("wyr1", (a!=null?a.st:null)).put("wyr2", (b!=null?b.st:null)).put("float", (a!=null?a.typ:0)==2 && (b!=null?b.typ:0)==2 ? "float" : null));
                    }


                    }
                    break;
                case 10 :
                    // /home/ravn/Workspace/pascal4j/src/pascalWalker.g:528:7: ^( OR a= wyrazenie b= wyrazenie )
                    {
                    match(input,OR,FOLLOW_OR_in_wyrazenie3135); 

                    match(input, Token.DOWN, null); 
                    pushFollow(FOLLOW_wyrazenie_in_wyrazenie3139);
                    a=wyrazenie();

                    state._fsp--;

                    pushFollow(FOLLOW_wyrazenie_in_wyrazenie3143);
                    b=wyrazenie();

                    state._fsp--;


                    match(input, Token.UP, null); 
                    retval.typ =1;


                    // TEMPLATE REWRITE
                    // 528:47: -> or(wyr1=$a.stwyr2=$b.st)
                    {
                        retval.st = templateLib.getInstanceOf("or",
                      new STAttrMap().put("wyr1", (a!=null?a.st:null)).put("wyr2", (b!=null?b.st:null)));
                    }


                    }
                    break;
                case 11 :
                    // /home/ravn/Workspace/pascal4j/src/pascalWalker.g:529:7: ^( GWIAZDKA a= wyrazenie b= wyrazenie )
                    {
                    match(input,GWIAZDKA,FOLLOW_GWIAZDKA_in_wyrazenie3168); 

                    match(input, Token.DOWN, null); 
                    pushFollow(FOLLOW_wyrazenie_in_wyrazenie3172);
                    a=wyrazenie();

                    state._fsp--;

                    pushFollow(FOLLOW_wyrazenie_in_wyrazenie3176);
                    b=wyrazenie();

                    state._fsp--;


                    match(input, Token.UP, null); 
                    retval.typ =najwiekszy((a!=null?a.typ:0),(b!=null?b.typ:0));


                    // TEMPLATE REWRITE
                    // 529:77: -> gwiazdka(wyr1=$a.stwyr2=$b.stfloat=$a.typ==2 && $b.typ==2 ? \"float\" : null)
                    {
                        retval.st = templateLib.getInstanceOf("gwiazdka",
                      new STAttrMap().put("wyr1", (a!=null?a.st:null)).put("wyr2", (b!=null?b.st:null)).put("float", (a!=null?a.typ:0)==2 && (b!=null?b.typ:0)==2 ? "float" : null));
                    }


                    }
                    break;
                case 12 :
                    // /home/ravn/Workspace/pascal4j/src/pascalWalker.g:530:7: ^( SLASH a= wyrazenie b= wyrazenie )
                    {
                    match(input,SLASH,FOLLOW_SLASH_in_wyrazenie3205); 

                    match(input, Token.DOWN, null); 
                    pushFollow(FOLLOW_wyrazenie_in_wyrazenie3209);
                    a=wyrazenie();

                    state._fsp--;

                    pushFollow(FOLLOW_wyrazenie_in_wyrazenie3213);
                    b=wyrazenie();

                    state._fsp--;

                    retval.typ =najwiekszy((a!=null?a.typ:0),(b!=null?b.typ:0));

                    match(input, Token.UP, null); 


                    // TEMPLATE REWRITE
                    // 530:74: -> slash(wyr1=$a.stwyr2=$b.stfloat=$a.typ==2 && $b.typ==2 ? \"float\" : null)
                    {
                        retval.st = templateLib.getInstanceOf("slash",
                      new STAttrMap().put("wyr1", (a!=null?a.st:null)).put("wyr2", (b!=null?b.st:null)).put("float", (a!=null?a.typ:0)==2 && (b!=null?b.typ:0)==2 ? "float" : null));
                    }


                    }
                    break;
                case 13 :
                    // /home/ravn/Workspace/pascal4j/src/pascalWalker.g:531:7: ^( DIV a= wyrazenie b= wyrazenie )
                    {
                    match(input,DIV,FOLLOW_DIV_in_wyrazenie3242); 

                    match(input, Token.DOWN, null); 
                    pushFollow(FOLLOW_wyrazenie_in_wyrazenie3246);
                    a=wyrazenie();

                    state._fsp--;

                    pushFollow(FOLLOW_wyrazenie_in_wyrazenie3250);
                    b=wyrazenie();

                    state._fsp--;


                    match(input, Token.UP, null); 
                    retval.typ =najwiekszy((a!=null?a.typ:0),(b!=null?b.typ:0));


                    // TEMPLATE REWRITE
                    // 531:72: -> div(wyr1=$a.stwyr2=$b.stfloat=$a.typ==2 && $b.typ==2 ? \"float\" : null)
                    {
                        retval.st = templateLib.getInstanceOf("div",
                      new STAttrMap().put("wyr1", (a!=null?a.st:null)).put("wyr2", (b!=null?b.st:null)).put("float", (a!=null?a.typ:0)==2 && (b!=null?b.typ:0)==2 ? "float" : null));
                    }


                    }
                    break;
                case 14 :
                    // /home/ravn/Workspace/pascal4j/src/pascalWalker.g:532:7: ^( MOD a= wyrazenie b= wyrazenie )
                    {
                    match(input,MOD,FOLLOW_MOD_in_wyrazenie3279); 

                    match(input, Token.DOWN, null); 
                    pushFollow(FOLLOW_wyrazenie_in_wyrazenie3283);
                    a=wyrazenie();

                    state._fsp--;

                    pushFollow(FOLLOW_wyrazenie_in_wyrazenie3287);
                    b=wyrazenie();

                    state._fsp--;


                    match(input, Token.UP, null); 
                    retval.typ =najwiekszy((a!=null?a.typ:0),(b!=null?b.typ:0));


                    // TEMPLATE REWRITE
                    // 532:72: -> mod(wyr1=$a.stwyr2=$b.st)
                    {
                        retval.st = templateLib.getInstanceOf("mod",
                      new STAttrMap().put("wyr1", (a!=null?a.st:null)).put("wyr2", (b!=null?b.st:null)));
                    }


                    }
                    break;
                case 15 :
                    // /home/ravn/Workspace/pascal4j/src/pascalWalker.g:533:7: ^( AND a= wyrazenie b= wyrazenie )
                    {
                    match(input,AND,FOLLOW_AND_in_wyrazenie3312); 

                    match(input, Token.DOWN, null); 
                    pushFollow(FOLLOW_wyrazenie_in_wyrazenie3316);
                    a=wyrazenie();

                    state._fsp--;

                    pushFollow(FOLLOW_wyrazenie_in_wyrazenie3320);
                    b=wyrazenie();

                    state._fsp--;


                    match(input, Token.UP, null); 
                    retval.typ =1;


                    // TEMPLATE REWRITE
                    // 533:48: -> and(wyr1=$a.stwyr2=$b.st)
                    {
                        retval.st = templateLib.getInstanceOf("and",
                      new STAttrMap().put("wyr1", (a!=null?a.st:null)).put("wyr2", (b!=null?b.st:null)));
                    }


                    }
                    break;
                case 16 :
                    // /home/ravn/Workspace/pascal4j/src/pascalWalker.g:534:7: ^( NOT a= wyrazenie )
                    {
                    match(input,NOT,FOLLOW_NOT_in_wyrazenie3345); 

                    match(input, Token.DOWN, null); 
                    pushFollow(FOLLOW_wyrazenie_in_wyrazenie3349);
                    a=wyrazenie();

                    state._fsp--;


                    match(input, Token.UP, null); 
                    retval.typ =1;


                    // TEMPLATE REWRITE
                    // 534:36: -> not(wyr1=$a.st)
                    {
                        retval.st = templateLib.getInstanceOf("not",
                      new STAttrMap().put("wyr1", (a!=null?a.st:null)));
                    }


                    }
                    break;
                case 17 :
                    // /home/ravn/Workspace/pascal4j/src/pascalWalker.g:535:7: zmienna
                    {
                    pushFollow(FOLLOW_zmienna_in_wyrazenie3369);
                    zmienna61=zmienna();

                    state._fsp--;

                    retval.typ =(zmienna61!=null?zmienna61.typ:0); 


                    // TEMPLATE REWRITE
                    // 535:37: -> przekaz(item=$zmienna.st)
                    {
                        retval.st = templateLib.getInstanceOf("przekaz",
                      new STAttrMap().put("item", (zmienna61!=null?zmienna61.st:null)));
                    }


                    }
                    break;
                case 18 :
                    // /home/ravn/Workspace/pascal4j/src/pascalWalker.g:536:7: nazewnik_funkcji
                    {
                    pushFollow(FOLLOW_nazewnik_funkcji_in_wyrazenie3388);
                    nazewnik_funkcji62=nazewnik_funkcji();

                    state._fsp--;

                    retval.typ =(nazewnik_funkcji62!=null?nazewnik_funkcji62.typ:0); 


                    // TEMPLATE REWRITE
                    // 536:54: -> przekaz(item=$nazewnik_funkcji.st)
                    {
                        retval.st = templateLib.getInstanceOf("przekaz",
                      new STAttrMap().put("item", (nazewnik_funkcji62!=null?nazewnik_funkcji62.st:null)));
                    }


                    }
                    break;
                case 19 :
                    // /home/ravn/Workspace/pascal4j/src/pascalWalker.g:537:7: NUM_INT
                    {
                    NUM_INT63=(CommonTree)match(input,NUM_INT,FOLLOW_NUM_INT_in_wyrazenie3406); 
                    retval.typ =1;


                    // TEMPLATE REWRITE
                    // 537:25: -> num(val=$NUM_INT.text)
                    {
                        retval.st = templateLib.getInstanceOf("num",
                      new STAttrMap().put("val", (NUM_INT63!=null?NUM_INT63.getText():null)));
                    }


                    }
                    break;
                case 20 :
                    // /home/ravn/Workspace/pascal4j/src/pascalWalker.g:538:7: NUM_REAL
                    {
                    NUM_REAL64=(CommonTree)match(input,NUM_REAL,FOLLOW_NUM_REAL_in_wyrazenie3426); 
                    retval.typ =2; 


                    // TEMPLATE REWRITE
                    // 538:26: -> num(val=$NUM_REAL.text)
                    {
                        retval.st = templateLib.getInstanceOf("num",
                      new STAttrMap().put("val", (NUM_REAL64!=null?NUM_REAL64.getText():null)));
                    }


                    }
                    break;
                case 21 :
                    // /home/ravn/Workspace/pascal4j/src/pascalWalker.g:539:7: napis
                    {
                    pushFollow(FOLLOW_napis_in_wyrazenie3445);
                    napis65=napis();

                    state._fsp--;

                    retval.typ =3;


                    // TEMPLATE REWRITE
                    // 539:23: -> przekaz(item=$napis.st)
                    {
                        retval.st = templateLib.getInstanceOf("przekaz",
                      new STAttrMap().put("item", (napis65!=null?napis65.st:null)));
                    }


                    }
                    break;
                case 22 :
                    // /home/ravn/Workspace/pascal4j/src/pascalWalker.g:540:7: NIL
                    {
                    NIL66=(CommonTree)match(input,NIL,FOLLOW_NIL_in_wyrazenie3464); 
                    retval.typ =0;


                    // TEMPLATE REWRITE
                    // 540:21: -> przekaz(item=$NIL.text)
                    {
                        retval.st = templateLib.getInstanceOf("przekaz",
                      new STAttrMap().put("item", (NIL66!=null?NIL66.getText():null)));
                    }


                    }
                    break;

            }
        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
        }
        finally {
        }
        return retval;
    }
    // $ANTLR end "wyrazenie"

    public static class nazewnik_funkcji_return extends TreeRuleReturnScope {
        public int typ;
        public StringTemplate st;
        public Object getTemplate() { return st; }
        public String toString() { return st==null?null:st.toString(); }
    };

    // $ANTLR start "nazewnik_funkcji"
    // /home/ravn/Workspace/pascal4j/src/pascalWalker.g:543:1: nazewnik_funkcji returns [int typ] : ^( FUNC_CALL IDENT ( lista_parametrow_aktualnych )? ) -> wywolanieFunkcji(id=$IDENT.textparametry=$lista_parametrow_aktualnych.stclassname=programName);
    public final pascalWalker.nazewnik_funkcji_return nazewnik_funkcji() throws RecognitionException {
        pascalWalker.nazewnik_funkcji_return retval = new pascalWalker.nazewnik_funkcji_return();
        retval.start = input.LT(1);

        CommonTree IDENT67=null;
        pascalWalker.lista_parametrow_aktualnych_return lista_parametrow_aktualnych68 = null;


        try {
            // /home/ravn/Workspace/pascal4j/src/pascalWalker.g:544:5: ( ^( FUNC_CALL IDENT ( lista_parametrow_aktualnych )? ) -> wywolanieFunkcji(id=$IDENT.textparametry=$lista_parametrow_aktualnych.stclassname=programName))
            // /home/ravn/Workspace/pascal4j/src/pascalWalker.g:544:7: ^( FUNC_CALL IDENT ( lista_parametrow_aktualnych )? )
            {
            match(input,FUNC_CALL,FOLLOW_FUNC_CALL_in_nazewnik_funkcji3497); 

            match(input, Token.DOWN, null); 
            IDENT67=(CommonTree)match(input,IDENT,FOLLOW_IDENT_in_nazewnik_funkcji3499); 
            // /home/ravn/Workspace/pascal4j/src/pascalWalker.g:544:25: ( lista_parametrow_aktualnych )?
            int alt41=2;
            int LA41_0 = input.LA(1);

            if ( (LA41_0==ARGLIST) ) {
                alt41=1;
            }
            switch (alt41) {
                case 1 :
                    // /home/ravn/Workspace/pascal4j/src/pascalWalker.g:544:25: lista_parametrow_aktualnych
                    {
                    pushFollow(FOLLOW_lista_parametrow_aktualnych_in_nazewnik_funkcji3501);
                    lista_parametrow_aktualnych68=lista_parametrow_aktualnych();

                    state._fsp--;


                    }
                    break;

            }


            match(input, Token.UP, null); 

            	if ( !isDefined(new Symbol((IDENT67!=null?IDENT67.getText():null), "funkcja") ) ) {
            		System.err.println("niezdefiniowana funkcja: "+(IDENT67!=null?IDENT67.getText():null));		
            		System.exit(1);
            	}
            	Symbol s=getSymbol((IDENT67!=null?IDENT67.getText():null), "funkcja");
            	retval.typ =s.retval;
                


            // TEMPLATE REWRITE
            // 551:7: -> wywolanieFunkcji(id=$IDENT.textparametry=$lista_parametrow_aktualnych.stclassname=programName)
            {
                retval.st = templateLib.getInstanceOf("wywolanieFunkcji",
              new STAttrMap().put("id", (IDENT67!=null?IDENT67.getText():null)).put("parametry", (lista_parametrow_aktualnych68!=null?lista_parametrow_aktualnych68.st:null)).put("classname", programName));
            }


            }

        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
        }
        finally {
        }
        return retval;
    }
    // $ANTLR end "nazewnik_funkcji"

    public static class lista_parametrow_aktualnych_return extends TreeRuleReturnScope {
        public List<String> paramTypes;
        public List<Integer> paramTypesInt;
        public StringTemplate st;
        public Object getTemplate() { return st; }
        public String toString() { return st==null?null:st.toString(); }
    };

    // $ANTLR start "lista_parametrow_aktualnych"
    // /home/ravn/Workspace/pascal4j/src/pascalWalker.g:554:1: lista_parametrow_aktualnych returns [List<String> paramTypes, List<Integer> paramTypesInt] : ^( ARGLIST (p+= parametr_aktualny )+ ) -> nlIdList(ids=$p);
    public final pascalWalker.lista_parametrow_aktualnych_return lista_parametrow_aktualnych() throws RecognitionException {
        pascalWalker.lista_parametrow_aktualnych_return retval = new pascalWalker.lista_parametrow_aktualnych_return();
        retval.start = input.LT(1);

        List list_p=null;
        pascalWalker.parametr_aktualny_return p = null;
         p = null;

        	retval.paramTypes =new LinkedList<String>();
        	retval.paramTypesInt =new LinkedList<Integer>();

        try {
            // /home/ravn/Workspace/pascal4j/src/pascalWalker.g:559:5: ( ^( ARGLIST (p+= parametr_aktualny )+ ) -> nlIdList(ids=$p))
            // /home/ravn/Workspace/pascal4j/src/pascalWalker.g:559:7: ^( ARGLIST (p+= parametr_aktualny )+ )
            {
            match(input,ARGLIST,FOLLOW_ARGLIST_in_lista_parametrow_aktualnych3552); 

            match(input, Token.DOWN, null); 
            // /home/ravn/Workspace/pascal4j/src/pascalWalker.g:559:19: (p+= parametr_aktualny )+
            int cnt42=0;
            loop42:
            do {
                int alt42=2;
                int LA42_0 = input.LA(1);

                if ( (LA42_0==FUNC_CALL||LA42_0==KROPKA||LA42_0==IDENT||(LA42_0>=ROWNOSC && LA42_0<=STRING_LITERAL)||LA42_0==LNAWIASKWADRATOWY||LA42_0==LNAWIAS2||LA42_0==WSKAZNIK||(LA42_0>=NIEROWNOSC && LA42_0<=NIL)) ) {
                    alt42=1;
                }


                switch (alt42) {
            	case 1 :
            	    // /home/ravn/Workspace/pascal4j/src/pascalWalker.g:559:19: p+= parametr_aktualny
            	    {
            	    pushFollow(FOLLOW_parametr_aktualny_in_lista_parametrow_aktualnych3556);
            	    p=parametr_aktualny();

            	    state._fsp--;

            	    if (list_p==null) list_p=new ArrayList();
            	    list_p.add(p.getTemplate());


            	    }
            	    break;

            	default :
            	    if ( cnt42 >= 1 ) break loop42;
                        EarlyExitException eee =
                            new EarlyExitException(42, input);
                        throw eee;
                }
                cnt42++;
            } while (true);


                		int typ=(p!=null?p.typ:0);
                		String typeDescr;
                		if(typ==1)
            	    		typeDescr="I";
            		else if(typ==2)
            	    		typeDescr="F";
            		else
            	    		typeDescr="Ljava/lang/String;";
            	    	retval.paramTypes.add(typeDescr);
            	    	retval.paramTypesInt.add(typ);
                	

            match(input, Token.UP, null); 


            // TEMPLATE REWRITE
            // 571:6: -> nlIdList(ids=$p)
            {
                retval.st = templateLib.getInstanceOf("nlIdList",
              new STAttrMap().put("ids", list_p));
            }


            }

        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
        }
        finally {
        }
        return retval;
    }
    // $ANTLR end "lista_parametrow_aktualnych"

    public static class element_return extends TreeRuleReturnScope {
        public StringTemplate st;
        public Object getTemplate() { return st; }
        public String toString() { return st==null?null:st.toString(); }
    };

    // $ANTLR start "element"
    // /home/ravn/Workspace/pascal4j/src/pascalWalker.g:574:1: element : ( ^( DWIEKROPKI wyrazenie wyrazenie ) | wyrazenie );
    public final pascalWalker.element_return element() throws RecognitionException {
        pascalWalker.element_return retval = new pascalWalker.element_return();
        retval.start = input.LT(1);

        try {
            // /home/ravn/Workspace/pascal4j/src/pascalWalker.g:575:5: ( ^( DWIEKROPKI wyrazenie wyrazenie ) | wyrazenie )
            int alt43=2;
            int LA43_0 = input.LA(1);

            if ( (LA43_0==DWIEKROPKI) ) {
                alt43=1;
            }
            else if ( (LA43_0==FUNC_CALL||LA43_0==KROPKA||LA43_0==IDENT||(LA43_0>=ROWNOSC && LA43_0<=STRING_LITERAL)||LA43_0==LNAWIASKWADRATOWY||LA43_0==LNAWIAS2||LA43_0==WSKAZNIK||(LA43_0>=NIEROWNOSC && LA43_0<=NIL)) ) {
                alt43=2;
            }
            else {
                NoViableAltException nvae =
                    new NoViableAltException("", 43, 0, input);

                throw nvae;
            }
            switch (alt43) {
                case 1 :
                    // /home/ravn/Workspace/pascal4j/src/pascalWalker.g:575:7: ^( DWIEKROPKI wyrazenie wyrazenie )
                    {
                    match(input,DWIEKROPKI,FOLLOW_DWIEKROPKI_in_element3594); 

                    match(input, Token.DOWN, null); 
                    pushFollow(FOLLOW_wyrazenie_in_element3596);
                    wyrazenie();

                    state._fsp--;

                    pushFollow(FOLLOW_wyrazenie_in_element3598);
                    wyrazenie();

                    state._fsp--;


                    match(input, Token.UP, null); 

                    }
                    break;
                case 2 :
                    // /home/ravn/Workspace/pascal4j/src/pascalWalker.g:576:7: wyrazenie
                    {
                    pushFollow(FOLLOW_wyrazenie_in_element3607);
                    wyrazenie();

                    state._fsp--;


                    }
                    break;

            }
        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
        }
        finally {
        }
        return retval;
    }
    // $ANTLR end "element"

    public static class instrukcja_procedury_return extends TreeRuleReturnScope {
        public StringTemplate st;
        public Object getTemplate() { return st; }
        public String toString() { return st==null?null:st.toString(); }
    };

    // $ANTLR start "instrukcja_procedury"
    // /home/ravn/Workspace/pascal4j/src/pascalWalker.g:579:1: instrukcja_procedury : ^( PROC_CALL IDENT ( lista_parametrow_aktualnych )? ) -> wywolanieProcedury(id=$IDENT.textparametry=$lista_parametrow_aktualnych.stclassname=programNamewriteln=$IDENT.text.toLowerCase().equals(\"writeln\") ? \"writeln\" : nullwritelnstr=$lista_parametrow_aktualnych.paramTypesInt.size()>0 && $lista_parametrow_aktualnych.paramTypesInt.get(0)==3 ? \"str\" : nullwritelnfloat=$lista_parametrow_aktualnych.paramTypesInt.size()>0 && $lista_parametrow_aktualnych.paramTypesInt.get(0)==2 ? \"float\" : nulltypy=$lista_parametrow_aktualnych.paramTypes);
    public final pascalWalker.instrukcja_procedury_return instrukcja_procedury() throws RecognitionException {
        pascalWalker.instrukcja_procedury_return retval = new pascalWalker.instrukcja_procedury_return();
        retval.start = input.LT(1);

        CommonTree IDENT69=null;
        pascalWalker.lista_parametrow_aktualnych_return lista_parametrow_aktualnych70 = null;


        try {
            // /home/ravn/Workspace/pascal4j/src/pascalWalker.g:580:5: ( ^( PROC_CALL IDENT ( lista_parametrow_aktualnych )? ) -> wywolanieProcedury(id=$IDENT.textparametry=$lista_parametrow_aktualnych.stclassname=programNamewriteln=$IDENT.text.toLowerCase().equals(\"writeln\") ? \"writeln\" : nullwritelnstr=$lista_parametrow_aktualnych.paramTypesInt.size()>0 && $lista_parametrow_aktualnych.paramTypesInt.get(0)==3 ? \"str\" : nullwritelnfloat=$lista_parametrow_aktualnych.paramTypesInt.size()>0 && $lista_parametrow_aktualnych.paramTypesInt.get(0)==2 ? \"float\" : nulltypy=$lista_parametrow_aktualnych.paramTypes))
            // /home/ravn/Workspace/pascal4j/src/pascalWalker.g:580:7: ^( PROC_CALL IDENT ( lista_parametrow_aktualnych )? )
            {
            match(input,PROC_CALL,FOLLOW_PROC_CALL_in_instrukcja_procedury3625); 

            match(input, Token.DOWN, null); 
            IDENT69=(CommonTree)match(input,IDENT,FOLLOW_IDENT_in_instrukcja_procedury3627); 
            // /home/ravn/Workspace/pascal4j/src/pascalWalker.g:580:25: ( lista_parametrow_aktualnych )?
            int alt44=2;
            int LA44_0 = input.LA(1);

            if ( (LA44_0==ARGLIST) ) {
                alt44=1;
            }
            switch (alt44) {
                case 1 :
                    // /home/ravn/Workspace/pascal4j/src/pascalWalker.g:580:25: lista_parametrow_aktualnych
                    {
                    pushFollow(FOLLOW_lista_parametrow_aktualnych_in_instrukcja_procedury3629);
                    lista_parametrow_aktualnych70=lista_parametrow_aktualnych();

                    state._fsp--;


                    }
                    break;

            }


            match(input, Token.UP, null); 

            	if ( !isDefined(new Symbol((IDENT69!=null?IDENT69.getText():null), "procedura") ) ) {
            		System.err.println("niezdefiniowana procedura: "+(IDENT69!=null?IDENT69.getText():null));
            		System.exit(1);
            	}
                


            // TEMPLATE REWRITE
            // 585:7: -> wywolanieProcedury(id=$IDENT.textparametry=$lista_parametrow_aktualnych.stclassname=programNamewriteln=$IDENT.text.toLowerCase().equals(\"writeln\") ? \"writeln\" : nullwritelnstr=$lista_parametrow_aktualnych.paramTypesInt.size()>0 && $lista_parametrow_aktualnych.paramTypesInt.get(0)==3 ? \"str\" : nullwritelnfloat=$lista_parametrow_aktualnych.paramTypesInt.size()>0 && $lista_parametrow_aktualnych.paramTypesInt.get(0)==2 ? \"float\" : nulltypy=$lista_parametrow_aktualnych.paramTypes)
            {
                retval.st = templateLib.getInstanceOf("wywolanieProcedury",
              new STAttrMap().put("id", (IDENT69!=null?IDENT69.getText():null)).put("parametry", (lista_parametrow_aktualnych70!=null?lista_parametrow_aktualnych70.st:null)).put("classname", programName).put("writeln", (IDENT69!=null?IDENT69.getText():null).toLowerCase().equals("writeln") ? "writeln" : null).put("writelnstr", (lista_parametrow_aktualnych70!=null?lista_parametrow_aktualnych70.paramTypesInt:null).size()>0 && (lista_parametrow_aktualnych70!=null?lista_parametrow_aktualnych70.paramTypesInt:null).get(0)==3 ? "str" : null).put("writelnfloat", (lista_parametrow_aktualnych70!=null?lista_parametrow_aktualnych70.paramTypesInt:null).size()>0 && (lista_parametrow_aktualnych70!=null?lista_parametrow_aktualnych70.paramTypesInt:null).get(0)==2 ? "float" : null).put("typy", (lista_parametrow_aktualnych70!=null?lista_parametrow_aktualnych70.paramTypes:null)));
            }


            }

        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
        }
        finally {
        }
        return retval;
    }
    // $ANTLR end "instrukcja_procedury"

    public static class parametr_aktualny_return extends TreeRuleReturnScope {
        public int typ;
        public StringTemplate st;
        public Object getTemplate() { return st; }
        public String toString() { return st==null?null:st.toString(); }
    };

    // $ANTLR start "parametr_aktualny"
    // /home/ravn/Workspace/pascal4j/src/pascalWalker.g:594:1: parametr_aktualny returns [int typ] : wyrazenie -> przekaz(item=$wyrazenie.st);
    public final pascalWalker.parametr_aktualny_return parametr_aktualny() throws RecognitionException {
        pascalWalker.parametr_aktualny_return retval = new pascalWalker.parametr_aktualny_return();
        retval.start = input.LT(1);

        pascalWalker.wyrazenie_return wyrazenie71 = null;


        try {
            // /home/ravn/Workspace/pascal4j/src/pascalWalker.g:595:5: ( wyrazenie -> przekaz(item=$wyrazenie.st))
            // /home/ravn/Workspace/pascal4j/src/pascalWalker.g:595:7: wyrazenie
            {
            pushFollow(FOLLOW_wyrazenie_in_parametr_aktualny3727);
            wyrazenie71=wyrazenie();

            state._fsp--;


                	retval.typ =(wyrazenie71!=null?wyrazenie71.typ:0);
                


            // TEMPLATE REWRITE
            // 598:5: -> przekaz(item=$wyrazenie.st)
            {
                retval.st = templateLib.getInstanceOf("przekaz",
              new STAttrMap().put("item", (wyrazenie71!=null?wyrazenie71.st:null)));
            }


            }

        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
        }
        finally {
        }
        return retval;
    }
    // $ANTLR end "parametr_aktualny"

    public static class instrukcja_skoku_return extends TreeRuleReturnScope {
        public StringTemplate st;
        public Object getTemplate() { return st; }
        public String toString() { return st==null?null:st.toString(); }
    };

    // $ANTLR start "instrukcja_skoku"
    // /home/ravn/Workspace/pascal4j/src/pascalWalker.g:601:1: instrukcja_skoku : ^( GOTO etykieta ) -> skok(et=$etykieta.st);
    public final pascalWalker.instrukcja_skoku_return instrukcja_skoku() throws RecognitionException {
        pascalWalker.instrukcja_skoku_return retval = new pascalWalker.instrukcja_skoku_return();
        retval.start = input.LT(1);

        pascalWalker.etykieta_return etykieta72 = null;


        try {
            // /home/ravn/Workspace/pascal4j/src/pascalWalker.g:602:5: ( ^( GOTO etykieta ) -> skok(et=$etykieta.st))
            // /home/ravn/Workspace/pascal4j/src/pascalWalker.g:602:7: ^( GOTO etykieta )
            {
            match(input,GOTO,FOLLOW_GOTO_in_instrukcja_skoku3760); 

            match(input, Token.DOWN, null); 
            pushFollow(FOLLOW_etykieta_in_instrukcja_skoku3762);
            etykieta72=etykieta();

            state._fsp--;


            match(input, Token.UP, null); 


            // TEMPLATE REWRITE
            // 602:24: -> skok(et=$etykieta.st)
            {
                retval.st = templateLib.getInstanceOf("skok",
              new STAttrMap().put("et", (etykieta72!=null?etykieta72.st:null)));
            }


            }

        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
        }
        finally {
        }
        return retval;
    }
    // $ANTLR end "instrukcja_skoku"

    public static class instrukcja_strukturalna_return extends TreeRuleReturnScope {
        public StringTemplate st;
        public Object getTemplate() { return st; }
        public String toString() { return st==null?null:st.toString(); }
    };

    // $ANTLR start "instrukcja_strukturalna"
    // /home/ravn/Workspace/pascal4j/src/pascalWalker.g:605:1: instrukcja_strukturalna : ( instrukcja_zlozona -> przekaz(item=$instrukcja_zlozona.st) | instrukcja_warunkowa -> przekaz(item=$instrukcja_warunkowa.st) | instrukcja_iteracyjna -> przekaz(item=$instrukcja_iteracyjna.st) | instrukcja_wiazaca -> przekaz(item=$instrukcja_wiazaca.st));
    public final pascalWalker.instrukcja_strukturalna_return instrukcja_strukturalna() throws RecognitionException {
        pascalWalker.instrukcja_strukturalna_return retval = new pascalWalker.instrukcja_strukturalna_return();
        retval.start = input.LT(1);

        pascalWalker.instrukcja_zlozona_return instrukcja_zlozona73 = null;

        pascalWalker.instrukcja_warunkowa_return instrukcja_warunkowa74 = null;

        pascalWalker.instrukcja_iteracyjna_return instrukcja_iteracyjna75 = null;

        pascalWalker.instrukcja_wiazaca_return instrukcja_wiazaca76 = null;


        try {
            // /home/ravn/Workspace/pascal4j/src/pascalWalker.g:606:5: ( instrukcja_zlozona -> przekaz(item=$instrukcja_zlozona.st) | instrukcja_warunkowa -> przekaz(item=$instrukcja_warunkowa.st) | instrukcja_iteracyjna -> przekaz(item=$instrukcja_iteracyjna.st) | instrukcja_wiazaca -> przekaz(item=$instrukcja_wiazaca.st))
            int alt45=4;
            switch ( input.LA(1) ) {
            case BLOCK:
                {
                alt45=1;
                }
                break;
            case CASE:
            case IF:
                {
                alt45=2;
                }
                break;
            case WHILE:
            case REPEAT:
            case FOR:
                {
                alt45=3;
                }
                break;
            case WITH:
                {
                alt45=4;
                }
                break;
            default:
                NoViableAltException nvae =
                    new NoViableAltException("", 45, 0, input);

                throw nvae;
            }

            switch (alt45) {
                case 1 :
                    // /home/ravn/Workspace/pascal4j/src/pascalWalker.g:606:7: instrukcja_zlozona
                    {
                    pushFollow(FOLLOW_instrukcja_zlozona_in_instrukcja_strukturalna3789);
                    instrukcja_zlozona73=instrukcja_zlozona();

                    state._fsp--;



                    // TEMPLATE REWRITE
                    // 606:26: -> przekaz(item=$instrukcja_zlozona.st)
                    {
                        retval.st = templateLib.getInstanceOf("przekaz",
                      new STAttrMap().put("item", (instrukcja_zlozona73!=null?instrukcja_zlozona73.st:null)));
                    }


                    }
                    break;
                case 2 :
                    // /home/ravn/Workspace/pascal4j/src/pascalWalker.g:607:7: instrukcja_warunkowa
                    {
                    pushFollow(FOLLOW_instrukcja_warunkowa_in_instrukcja_strukturalna3806);
                    instrukcja_warunkowa74=instrukcja_warunkowa();

                    state._fsp--;



                    // TEMPLATE REWRITE
                    // 607:28: -> przekaz(item=$instrukcja_warunkowa.st)
                    {
                        retval.st = templateLib.getInstanceOf("przekaz",
                      new STAttrMap().put("item", (instrukcja_warunkowa74!=null?instrukcja_warunkowa74.st:null)));
                    }


                    }
                    break;
                case 3 :
                    // /home/ravn/Workspace/pascal4j/src/pascalWalker.g:608:7: instrukcja_iteracyjna
                    {
                    pushFollow(FOLLOW_instrukcja_iteracyjna_in_instrukcja_strukturalna3823);
                    instrukcja_iteracyjna75=instrukcja_iteracyjna();

                    state._fsp--;



                    // TEMPLATE REWRITE
                    // 608:29: -> przekaz(item=$instrukcja_iteracyjna.st)
                    {
                        retval.st = templateLib.getInstanceOf("przekaz",
                      new STAttrMap().put("item", (instrukcja_iteracyjna75!=null?instrukcja_iteracyjna75.st:null)));
                    }


                    }
                    break;
                case 4 :
                    // /home/ravn/Workspace/pascal4j/src/pascalWalker.g:609:7: instrukcja_wiazaca
                    {
                    pushFollow(FOLLOW_instrukcja_wiazaca_in_instrukcja_strukturalna3840);
                    instrukcja_wiazaca76=instrukcja_wiazaca();

                    state._fsp--;



                    // TEMPLATE REWRITE
                    // 609:26: -> przekaz(item=$instrukcja_wiazaca.st)
                    {
                        retval.st = templateLib.getInstanceOf("przekaz",
                      new STAttrMap().put("item", (instrukcja_wiazaca76!=null?instrukcja_wiazaca76.st:null)));
                    }


                    }
                    break;

            }
        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
        }
        finally {
        }
        return retval;
    }
    // $ANTLR end "instrukcja_strukturalna"

    public static class instrukcja_zlozona_return extends TreeRuleReturnScope {
        public int liczbaInstrukcji;
        public StringTemplate st;
        public Object getTemplate() { return st; }
        public String toString() { return st==null?null:st.toString(); }
    };

    // $ANTLR start "instrukcja_zlozona"
    // /home/ravn/Workspace/pascal4j/src/pascalWalker.g:612:1: instrukcja_zlozona returns [int liczbaInstrukcji] : ciag_instrukcji -> przekaz(item=$ciag_instrukcji.st);
    public final pascalWalker.instrukcja_zlozona_return instrukcja_zlozona() throws RecognitionException {
        pascalWalker.instrukcja_zlozona_return retval = new pascalWalker.instrukcja_zlozona_return();
        retval.start = input.LT(1);

        pascalWalker.ciag_instrukcji_return ciag_instrukcji77 = null;


        try {
            // /home/ravn/Workspace/pascal4j/src/pascalWalker.g:613:5: ( ciag_instrukcji -> przekaz(item=$ciag_instrukcji.st))
            // /home/ravn/Workspace/pascal4j/src/pascalWalker.g:613:7: ciag_instrukcji
            {
            pushFollow(FOLLOW_ciag_instrukcji_in_instrukcja_zlozona3870);
            ciag_instrukcji77=ciag_instrukcji();

            state._fsp--;

            retval.liczbaInstrukcji =(ciag_instrukcji77!=null?ciag_instrukcji77.count:0); 


            // TEMPLATE REWRITE
            // 613:68: -> przekaz(item=$ciag_instrukcji.st)
            {
                retval.st = templateLib.getInstanceOf("przekaz",
              new STAttrMap().put("item", (ciag_instrukcji77!=null?ciag_instrukcji77.st:null)));
            }


            }

        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
        }
        finally {
        }
        return retval;
    }
    // $ANTLR end "instrukcja_zlozona"

    public static class ciag_instrukcji_return extends TreeRuleReturnScope {
        public int count;
        public StringTemplate st;
        public Object getTemplate() { return st; }
        public String toString() { return st==null?null:st.toString(); }
    };

    // $ANTLR start "ciag_instrukcji"
    // /home/ravn/Workspace/pascal4j/src/pascalWalker.g:616:1: ciag_instrukcji returns [int count] : ^( BLOCK (a+= instrukcja )* ) -> ciagInstrukcji(instrs=$a);
    public final pascalWalker.ciag_instrukcji_return ciag_instrukcji() throws RecognitionException {
        pascalWalker.ciag_instrukcji_return retval = new pascalWalker.ciag_instrukcji_return();
        retval.start = input.LT(1);

        List list_a=null;
        pascalWalker.instrukcja_return a = null;
         a = null;
        try {
            // /home/ravn/Workspace/pascal4j/src/pascalWalker.g:617:5: ( ^( BLOCK (a+= instrukcja )* ) -> ciagInstrukcji(instrs=$a))
            // /home/ravn/Workspace/pascal4j/src/pascalWalker.g:617:7: ^( BLOCK (a+= instrukcja )* )
            {
            match(input,BLOCK,FOLLOW_BLOCK_in_ciag_instrukcji3903); 

            if ( input.LA(1)==Token.DOWN ) {
                match(input, Token.DOWN, null); 
                // /home/ravn/Workspace/pascal4j/src/pascalWalker.g:617:16: (a+= instrukcja )*
                loop46:
                do {
                    int alt46=2;
                    int LA46_0 = input.LA(1);

                    if ( (LA46_0==BLOCK||LA46_0==PROC_CALL||(LA46_0>=DWUKROPEK && LA46_0<=CASE)||LA46_0==PRZYPISANIE||LA46_0==GOTO||LA46_0==IF||LA46_0==WHILE||LA46_0==REPEAT||LA46_0==FOR||LA46_0==WITH) ) {
                        alt46=1;
                    }


                    switch (alt46) {
                	case 1 :
                	    // /home/ravn/Workspace/pascal4j/src/pascalWalker.g:617:16: a+= instrukcja
                	    {
                	    pushFollow(FOLLOW_instrukcja_in_ciag_instrukcji3907);
                	    a=instrukcja();

                	    state._fsp--;

                	    if (list_a==null) list_a=new ArrayList();
                	    list_a.add(a.getTemplate());


                	    }
                	    break;

                	default :
                	    break loop46;
                    }
                } while (true);


                match(input, Token.UP, null); 
            }
             retval.count =list_a.size(); 


            // TEMPLATE REWRITE
            // 617:52: -> ciagInstrukcji(instrs=$a)
            {
                retval.st = templateLib.getInstanceOf("ciagInstrukcji",
              new STAttrMap().put("instrs", list_a));
            }


            }

        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
        }
        finally {
        }
        return retval;
    }
    // $ANTLR end "ciag_instrukcji"

    public static class instrukcja_warunkowa_return extends TreeRuleReturnScope {
        public StringTemplate st;
        public Object getTemplate() { return st; }
        public String toString() { return st==null?null:st.toString(); }
    };

    // $ANTLR start "instrukcja_warunkowa"
    // /home/ravn/Workspace/pascal4j/src/pascalWalker.g:620:1: instrukcja_warunkowa : ( instrukcja_jesli -> przekaz(item=$instrukcja_jesli.st) | instrukcja_wyboru -> przekaz(item=$instrukcja_wyboru.st));
    public final pascalWalker.instrukcja_warunkowa_return instrukcja_warunkowa() throws RecognitionException {
        pascalWalker.instrukcja_warunkowa_return retval = new pascalWalker.instrukcja_warunkowa_return();
        retval.start = input.LT(1);

        pascalWalker.instrukcja_jesli_return instrukcja_jesli78 = null;

        pascalWalker.instrukcja_wyboru_return instrukcja_wyboru79 = null;


        try {
            // /home/ravn/Workspace/pascal4j/src/pascalWalker.g:621:5: ( instrukcja_jesli -> przekaz(item=$instrukcja_jesli.st) | instrukcja_wyboru -> przekaz(item=$instrukcja_wyboru.st))
            int alt47=2;
            int LA47_0 = input.LA(1);

            if ( (LA47_0==IF) ) {
                alt47=1;
            }
            else if ( (LA47_0==CASE) ) {
                alt47=2;
            }
            else {
                NoViableAltException nvae =
                    new NoViableAltException("", 47, 0, input);

                throw nvae;
            }
            switch (alt47) {
                case 1 :
                    // /home/ravn/Workspace/pascal4j/src/pascalWalker.g:621:7: instrukcja_jesli
                    {
                    pushFollow(FOLLOW_instrukcja_jesli_in_instrukcja_warunkowa3936);
                    instrukcja_jesli78=instrukcja_jesli();

                    state._fsp--;



                    // TEMPLATE REWRITE
                    // 621:24: -> przekaz(item=$instrukcja_jesli.st)
                    {
                        retval.st = templateLib.getInstanceOf("przekaz",
                      new STAttrMap().put("item", (instrukcja_jesli78!=null?instrukcja_jesli78.st:null)));
                    }


                    }
                    break;
                case 2 :
                    // /home/ravn/Workspace/pascal4j/src/pascalWalker.g:622:7: instrukcja_wyboru
                    {
                    pushFollow(FOLLOW_instrukcja_wyboru_in_instrukcja_warunkowa3953);
                    instrukcja_wyboru79=instrukcja_wyboru();

                    state._fsp--;



                    // TEMPLATE REWRITE
                    // 622:25: -> przekaz(item=$instrukcja_wyboru.st)
                    {
                        retval.st = templateLib.getInstanceOf("przekaz",
                      new STAttrMap().put("item", (instrukcja_wyboru79!=null?instrukcja_wyboru79.st:null)));
                    }


                    }
                    break;

            }
        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
        }
        finally {
        }
        return retval;
    }
    // $ANTLR end "instrukcja_warunkowa"

    public static class instrukcja_jesli_return extends TreeRuleReturnScope {
        public StringTemplate st;
        public Object getTemplate() { return st; }
        public String toString() { return st==null?null:st.toString(); }
    };

    // $ANTLR start "instrukcja_jesli"
    // /home/ravn/Workspace/pascal4j/src/pascalWalker.g:625:1: instrukcja_jesli : ^( IF a= wyrazenie b= instrukcja (c= instrukcja )? ) -> if(wyr=$a.stinstr1=$b.stinstr2=$c.stnum=$PScope::ifCount++);
    public final pascalWalker.instrukcja_jesli_return instrukcja_jesli() throws RecognitionException {
        pascalWalker.instrukcja_jesli_return retval = new pascalWalker.instrukcja_jesli_return();
        retval.start = input.LT(1);

        pascalWalker.wyrazenie_return a = null;

        pascalWalker.instrukcja_return b = null;

        pascalWalker.instrukcja_return c = null;


        try {
            // /home/ravn/Workspace/pascal4j/src/pascalWalker.g:626:5: ( ^( IF a= wyrazenie b= instrukcja (c= instrukcja )? ) -> if(wyr=$a.stinstr1=$b.stinstr2=$c.stnum=$PScope::ifCount++))
            // /home/ravn/Workspace/pascal4j/src/pascalWalker.g:626:7: ^( IF a= wyrazenie b= instrukcja (c= instrukcja )? )
            {
            match(input,IF,FOLLOW_IF_in_instrukcja_jesli3980); 

            match(input, Token.DOWN, null); 
            pushFollow(FOLLOW_wyrazenie_in_instrukcja_jesli3984);
            a=wyrazenie();

            state._fsp--;

            pushFollow(FOLLOW_instrukcja_in_instrukcja_jesli3988);
            b=instrukcja();

            state._fsp--;

            // /home/ravn/Workspace/pascal4j/src/pascalWalker.g:626:38: (c= instrukcja )?
            int alt48=2;
            int LA48_0 = input.LA(1);

            if ( (LA48_0==BLOCK||LA48_0==PROC_CALL||(LA48_0>=DWUKROPEK && LA48_0<=CASE)||LA48_0==PRZYPISANIE||LA48_0==GOTO||LA48_0==IF||LA48_0==WHILE||LA48_0==REPEAT||LA48_0==FOR||LA48_0==WITH) ) {
                alt48=1;
            }
            switch (alt48) {
                case 1 :
                    // /home/ravn/Workspace/pascal4j/src/pascalWalker.g:626:38: c= instrukcja
                    {
                    pushFollow(FOLLOW_instrukcja_in_instrukcja_jesli3992);
                    c=instrukcja();

                    state._fsp--;


                    }
                    break;

            }


            match(input, Token.UP, null); 


            // TEMPLATE REWRITE
            // 626:52: -> if(wyr=$a.stinstr1=$b.stinstr2=$c.stnum=$PScope::ifCount++)
            {
                retval.st = templateLib.getInstanceOf("if",
              new STAttrMap().put("wyr", (a!=null?a.st:null)).put("instr1", (b!=null?b.st:null)).put("instr2", (c!=null?c.st:null)).put("num", ((PScope_scope)PScope_stack.peek()).ifCount++));
            }


            }

        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
        }
        finally {
        }
        return retval;
    }
    // $ANTLR end "instrukcja_jesli"

    public static class instrukcja_wyboru_return extends TreeRuleReturnScope {
        public StringTemplate st;
        public Object getTemplate() { return st; }
        public String toString() { return st==null?null:st.toString(); }
    };

    // $ANTLR start "instrukcja_wyboru"
    // /home/ravn/Workspace/pascal4j/src/pascalWalker.g:629:1: instrukcja_wyboru : ^( CASE a= wyrazenie (b+= element_listy_wyboru )+ (c= ciag_instrukcji )? ) -> case(wyr=$a.stcases=$belsecase=$c.stcasenum=$PScope::caseCount++);
    public final pascalWalker.instrukcja_wyboru_return instrukcja_wyboru() throws RecognitionException {
        pascalWalker.instrukcja_wyboru_return retval = new pascalWalker.instrukcja_wyboru_return();
        retval.start = input.LT(1);

        List list_b=null;
        pascalWalker.wyrazenie_return a = null;

        pascalWalker.ciag_instrukcji_return c = null;

        pascalWalker.element_listy_wyboru_return b = null;
         b = null;
        try {
            // /home/ravn/Workspace/pascal4j/src/pascalWalker.g:630:5: ( ^( CASE a= wyrazenie (b+= element_listy_wyboru )+ (c= ciag_instrukcji )? ) -> case(wyr=$a.stcases=$belsecase=$c.stcasenum=$PScope::caseCount++))
            // /home/ravn/Workspace/pascal4j/src/pascalWalker.g:630:7: ^( CASE a= wyrazenie (b+= element_listy_wyboru )+ (c= ciag_instrukcji )? )
            {
            match(input,CASE,FOLLOW_CASE_in_instrukcja_wyboru4036); 

            match(input, Token.DOWN, null); 
            pushFollow(FOLLOW_wyrazenie_in_instrukcja_wyboru4040);
            a=wyrazenie();

            state._fsp--;

            // /home/ravn/Workspace/pascal4j/src/pascalWalker.g:631:10: (b+= element_listy_wyboru )+
            int cnt49=0;
            loop49:
            do {
                int alt49=2;
                int LA49_0 = input.LA(1);

                if ( (LA49_0==DWUKROPEK) ) {
                    alt49=1;
                }


                switch (alt49) {
            	case 1 :
            	    // /home/ravn/Workspace/pascal4j/src/pascalWalker.g:631:10: b+= element_listy_wyboru
            	    {
            	    pushFollow(FOLLOW_element_listy_wyboru_in_instrukcja_wyboru4052);
            	    b=element_listy_wyboru();

            	    state._fsp--;

            	    if (list_b==null) list_b=new ArrayList();
            	    list_b.add(b.getTemplate());


            	    }
            	    break;

            	default :
            	    if ( cnt49 >= 1 ) break loop49;
                        EarlyExitException eee =
                            new EarlyExitException(49, input);
                        throw eee;
                }
                cnt49++;
            } while (true);

            // /home/ravn/Workspace/pascal4j/src/pascalWalker.g:632:10: (c= ciag_instrukcji )?
            int alt50=2;
            int LA50_0 = input.LA(1);

            if ( (LA50_0==BLOCK) ) {
                alt50=1;
            }
            switch (alt50) {
                case 1 :
                    // /home/ravn/Workspace/pascal4j/src/pascalWalker.g:632:10: c= ciag_instrukcji
                    {
                    pushFollow(FOLLOW_ciag_instrukcji_in_instrukcja_wyboru4065);
                    c=ciag_instrukcji();

                    state._fsp--;


                    }
                    break;

            }


            match(input, Token.UP, null); 


            // TEMPLATE REWRITE
            // 633:10: -> case(wyr=$a.stcases=$belsecase=$c.stcasenum=$PScope::caseCount++)
            {
                retval.st = templateLib.getInstanceOf("case",
              new STAttrMap().put("wyr", (a!=null?a.st:null)).put("cases", list_b).put("elsecase", (c!=null?c.st:null)).put("casenum", ((PScope_scope)PScope_stack.peek()).caseCount++));
            }


            }

        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
        }
        finally {
        }
        return retval;
    }
    // $ANTLR end "instrukcja_wyboru"

    public static class element_listy_wyboru_return extends TreeRuleReturnScope {
        public StringTemplate st;
        public Object getTemplate() { return st; }
        public String toString() { return st==null?null:st.toString(); }
    };

    // $ANTLR start "element_listy_wyboru"
    // /home/ravn/Workspace/pascal4j/src/pascalWalker.g:636:1: element_listy_wyboru : ^( DWUKROPEK lista_stalych_wyboru instrukcja ) -> elementListyWyboru(consts=$lista_stalych_wyboru.stinstr=$instrukcja.st);
    public final pascalWalker.element_listy_wyboru_return element_listy_wyboru() throws RecognitionException {
        pascalWalker.element_listy_wyboru_return retval = new pascalWalker.element_listy_wyboru_return();
        retval.start = input.LT(1);

        pascalWalker.lista_stalych_wyboru_return lista_stalych_wyboru80 = null;

        pascalWalker.instrukcja_return instrukcja81 = null;


        try {
            // /home/ravn/Workspace/pascal4j/src/pascalWalker.g:637:5: ( ^( DWUKROPEK lista_stalych_wyboru instrukcja ) -> elementListyWyboru(consts=$lista_stalych_wyboru.stinstr=$instrukcja.st))
            // /home/ravn/Workspace/pascal4j/src/pascalWalker.g:637:7: ^( DWUKROPEK lista_stalych_wyboru instrukcja )
            {
            match(input,DWUKROPEK,FOLLOW_DWUKROPEK_in_element_listy_wyboru4115); 

            match(input, Token.DOWN, null); 
            pushFollow(FOLLOW_lista_stalych_wyboru_in_element_listy_wyboru4117);
            lista_stalych_wyboru80=lista_stalych_wyboru();

            state._fsp--;

            pushFollow(FOLLOW_instrukcja_in_element_listy_wyboru4119);
            instrukcja81=instrukcja();

            state._fsp--;


            match(input, Token.UP, null); 


            // TEMPLATE REWRITE
            // 637:52: -> elementListyWyboru(consts=$lista_stalych_wyboru.stinstr=$instrukcja.st)
            {
                retval.st = templateLib.getInstanceOf("elementListyWyboru",
              new STAttrMap().put("consts", (lista_stalych_wyboru80!=null?lista_stalych_wyboru80.st:null)).put("instr", (instrukcja81!=null?instrukcja81.st:null)));
            }


            }

        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
        }
        finally {
        }
        return retval;
    }
    // $ANTLR end "element_listy_wyboru"

    public static class instrukcja_iteracyjna_return extends TreeRuleReturnScope {
        public StringTemplate st;
        public Object getTemplate() { return st; }
        public String toString() { return st==null?null:st.toString(); }
    };

    // $ANTLR start "instrukcja_iteracyjna"
    // /home/ravn/Workspace/pascal4j/src/pascalWalker.g:640:1: instrukcja_iteracyjna : ( instrukcja_dopoki -> przekaz(item=$instrukcja_dopoki.st) | instrukcja_powtarzaj -> przekaz(item=$instrukcja_powtarzaj.st) | instrukcja_dla -> przekaz(item=$instrukcja_dla.st));
    public final pascalWalker.instrukcja_iteracyjna_return instrukcja_iteracyjna() throws RecognitionException {
        pascalWalker.instrukcja_iteracyjna_return retval = new pascalWalker.instrukcja_iteracyjna_return();
        retval.start = input.LT(1);

        pascalWalker.instrukcja_dopoki_return instrukcja_dopoki82 = null;

        pascalWalker.instrukcja_powtarzaj_return instrukcja_powtarzaj83 = null;

        pascalWalker.instrukcja_dla_return instrukcja_dla84 = null;


        try {
            // /home/ravn/Workspace/pascal4j/src/pascalWalker.g:641:5: ( instrukcja_dopoki -> przekaz(item=$instrukcja_dopoki.st) | instrukcja_powtarzaj -> przekaz(item=$instrukcja_powtarzaj.st) | instrukcja_dla -> przekaz(item=$instrukcja_dla.st))
            int alt51=3;
            switch ( input.LA(1) ) {
            case WHILE:
                {
                alt51=1;
                }
                break;
            case REPEAT:
                {
                alt51=2;
                }
                break;
            case FOR:
                {
                alt51=3;
                }
                break;
            default:
                NoViableAltException nvae =
                    new NoViableAltException("", 51, 0, input);

                throw nvae;
            }

            switch (alt51) {
                case 1 :
                    // /home/ravn/Workspace/pascal4j/src/pascalWalker.g:641:7: instrukcja_dopoki
                    {
                    pushFollow(FOLLOW_instrukcja_dopoki_in_instrukcja_iteracyjna4150);
                    instrukcja_dopoki82=instrukcja_dopoki();

                    state._fsp--;



                    // TEMPLATE REWRITE
                    // 641:25: -> przekaz(item=$instrukcja_dopoki.st)
                    {
                        retval.st = templateLib.getInstanceOf("przekaz",
                      new STAttrMap().put("item", (instrukcja_dopoki82!=null?instrukcja_dopoki82.st:null)));
                    }


                    }
                    break;
                case 2 :
                    // /home/ravn/Workspace/pascal4j/src/pascalWalker.g:642:7: instrukcja_powtarzaj
                    {
                    pushFollow(FOLLOW_instrukcja_powtarzaj_in_instrukcja_iteracyjna4167);
                    instrukcja_powtarzaj83=instrukcja_powtarzaj();

                    state._fsp--;



                    // TEMPLATE REWRITE
                    // 642:28: -> przekaz(item=$instrukcja_powtarzaj.st)
                    {
                        retval.st = templateLib.getInstanceOf("przekaz",
                      new STAttrMap().put("item", (instrukcja_powtarzaj83!=null?instrukcja_powtarzaj83.st:null)));
                    }


                    }
                    break;
                case 3 :
                    // /home/ravn/Workspace/pascal4j/src/pascalWalker.g:643:7: instrukcja_dla
                    {
                    pushFollow(FOLLOW_instrukcja_dla_in_instrukcja_iteracyjna4184);
                    instrukcja_dla84=instrukcja_dla();

                    state._fsp--;



                    // TEMPLATE REWRITE
                    // 643:22: -> przekaz(item=$instrukcja_dla.st)
                    {
                        retval.st = templateLib.getInstanceOf("przekaz",
                      new STAttrMap().put("item", (instrukcja_dla84!=null?instrukcja_dla84.st:null)));
                    }


                    }
                    break;

            }
        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
        }
        finally {
        }
        return retval;
    }
    // $ANTLR end "instrukcja_iteracyjna"

    public static class instrukcja_dopoki_return extends TreeRuleReturnScope {
        public StringTemplate st;
        public Object getTemplate() { return st; }
        public String toString() { return st==null?null:st.toString(); }
    };

    // $ANTLR start "instrukcja_dopoki"
    // /home/ravn/Workspace/pascal4j/src/pascalWalker.g:646:1: instrukcja_dopoki : ^( WHILE wyrazenie instrukcja ) -> while(wyr=$wyrazenie.stinstr=$instrukcja.stnum=$PScope::whileCount++);
    public final pascalWalker.instrukcja_dopoki_return instrukcja_dopoki() throws RecognitionException {
        pascalWalker.instrukcja_dopoki_return retval = new pascalWalker.instrukcja_dopoki_return();
        retval.start = input.LT(1);

        pascalWalker.wyrazenie_return wyrazenie85 = null;

        pascalWalker.instrukcja_return instrukcja86 = null;


        try {
            // /home/ravn/Workspace/pascal4j/src/pascalWalker.g:647:5: ( ^( WHILE wyrazenie instrukcja ) -> while(wyr=$wyrazenie.stinstr=$instrukcja.stnum=$PScope::whileCount++))
            // /home/ravn/Workspace/pascal4j/src/pascalWalker.g:647:7: ^( WHILE wyrazenie instrukcja )
            {
            match(input,WHILE,FOLLOW_WHILE_in_instrukcja_dopoki4211); 

            match(input, Token.DOWN, null); 
            pushFollow(FOLLOW_wyrazenie_in_instrukcja_dopoki4213);
            wyrazenie85=wyrazenie();

            state._fsp--;

            pushFollow(FOLLOW_instrukcja_in_instrukcja_dopoki4215);
            instrukcja86=instrukcja();

            state._fsp--;


            match(input, Token.UP, null); 


            // TEMPLATE REWRITE
            // 647:37: -> while(wyr=$wyrazenie.stinstr=$instrukcja.stnum=$PScope::whileCount++)
            {
                retval.st = templateLib.getInstanceOf("while",
              new STAttrMap().put("wyr", (wyrazenie85!=null?wyrazenie85.st:null)).put("instr", (instrukcja86!=null?instrukcja86.st:null)).put("num", ((PScope_scope)PScope_stack.peek()).whileCount++));
            }


            }

        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
        }
        finally {
        }
        return retval;
    }
    // $ANTLR end "instrukcja_dopoki"

    public static class instrukcja_powtarzaj_return extends TreeRuleReturnScope {
        public StringTemplate st;
        public Object getTemplate() { return st; }
        public String toString() { return st==null?null:st.toString(); }
    };

    // $ANTLR start "instrukcja_powtarzaj"
    // /home/ravn/Workspace/pascal4j/src/pascalWalker.g:650:1: instrukcja_powtarzaj : ^( REPEAT ciag_instrukcji wyrazenie ) -> repeat(wyr=$wyrazenie.stinstr=$ciag_instrukcji.stnum=$PScope::repeatCount++);
    public final pascalWalker.instrukcja_powtarzaj_return instrukcja_powtarzaj() throws RecognitionException {
        pascalWalker.instrukcja_powtarzaj_return retval = new pascalWalker.instrukcja_powtarzaj_return();
        retval.start = input.LT(1);

        pascalWalker.wyrazenie_return wyrazenie87 = null;

        pascalWalker.ciag_instrukcji_return ciag_instrukcji88 = null;


        try {
            // /home/ravn/Workspace/pascal4j/src/pascalWalker.g:651:5: ( ^( REPEAT ciag_instrukcji wyrazenie ) -> repeat(wyr=$wyrazenie.stinstr=$ciag_instrukcji.stnum=$PScope::repeatCount++))
            // /home/ravn/Workspace/pascal4j/src/pascalWalker.g:651:7: ^( REPEAT ciag_instrukcji wyrazenie )
            {
            match(input,REPEAT,FOLLOW_REPEAT_in_instrukcja_powtarzaj4251); 

            match(input, Token.DOWN, null); 
            pushFollow(FOLLOW_ciag_instrukcji_in_instrukcja_powtarzaj4253);
            ciag_instrukcji88=ciag_instrukcji();

            state._fsp--;

            pushFollow(FOLLOW_wyrazenie_in_instrukcja_powtarzaj4255);
            wyrazenie87=wyrazenie();

            state._fsp--;


            match(input, Token.UP, null); 


            // TEMPLATE REWRITE
            // 651:43: -> repeat(wyr=$wyrazenie.stinstr=$ciag_instrukcji.stnum=$PScope::repeatCount++)
            {
                retval.st = templateLib.getInstanceOf("repeat",
              new STAttrMap().put("wyr", (wyrazenie87!=null?wyrazenie87.st:null)).put("instr", (ciag_instrukcji88!=null?ciag_instrukcji88.st:null)).put("num", ((PScope_scope)PScope_stack.peek()).repeatCount++));
            }


            }

        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
        }
        finally {
        }
        return retval;
    }
    // $ANTLR end "instrukcja_powtarzaj"

    public static class instrukcja_dla_return extends TreeRuleReturnScope {
        public StringTemplate st;
        public Object getTemplate() { return st; }
        public String toString() { return st==null?null:st.toString(); }
    };

    // $ANTLR start "instrukcja_dla"
    // /home/ravn/Workspace/pascal4j/src/pascalWalker.g:654:1: instrukcja_dla : ^( FOR IDENT a= sekwencja_for[getSymbol($IDENT.text,\"zmienna\").count,$PScope::forCount] instrukcja ) -> for(to= $a.to ? \"to\" : null id=$IDENT.textseq=$a.stinstr=$instrukcja.stnum=$PScope::forCount++start=$a.startend=$a.endvarnum=getSymbol($IDENT.text,\"zmienna\").count);
    public final pascalWalker.instrukcja_dla_return instrukcja_dla() throws RecognitionException {
        pascalWalker.instrukcja_dla_return retval = new pascalWalker.instrukcja_dla_return();
        retval.start = input.LT(1);

        CommonTree IDENT89=null;
        pascalWalker.sekwencja_for_return a = null;

        pascalWalker.instrukcja_return instrukcja90 = null;


        try {
            // /home/ravn/Workspace/pascal4j/src/pascalWalker.g:655:5: ( ^( FOR IDENT a= sekwencja_for[getSymbol($IDENT.text,\"zmienna\").count,$PScope::forCount] instrukcja ) -> for(to= $a.to ? \"to\" : null id=$IDENT.textseq=$a.stinstr=$instrukcja.stnum=$PScope::forCount++start=$a.startend=$a.endvarnum=getSymbol($IDENT.text,\"zmienna\").count))
            // /home/ravn/Workspace/pascal4j/src/pascalWalker.g:655:7: ^( FOR IDENT a= sekwencja_for[getSymbol($IDENT.text,\"zmienna\").count,$PScope::forCount] instrukcja )
            {
            match(input,FOR,FOLLOW_FOR_in_instrukcja_dla4292); 

            match(input, Token.DOWN, null); 
            IDENT89=(CommonTree)match(input,IDENT,FOLLOW_IDENT_in_instrukcja_dla4294); 
            pushFollow(FOLLOW_sekwencja_for_in_instrukcja_dla4298);
            a=sekwencja_for(getSymbol((IDENT89!=null?IDENT89.getText():null),"zmienna").count, ((PScope_scope)PScope_stack.peek()).forCount);

            state._fsp--;

            pushFollow(FOLLOW_instrukcja_in_instrukcja_dla4301);
            instrukcja90=instrukcja();

            state._fsp--;


            match(input, Token.UP, null); 


            // TEMPLATE REWRITE
            // 658:5: -> for(to= $a.to ? \"to\" : null id=$IDENT.textseq=$a.stinstr=$instrukcja.stnum=$PScope::forCount++start=$a.startend=$a.endvarnum=getSymbol($IDENT.text,\"zmienna\").count)
            {
                retval.st = templateLib.getInstanceOf("for",
              new STAttrMap().put("to",  (a!=null?a.to:false) ? "to" : null ).put("id", (IDENT89!=null?IDENT89.getText():null)).put("seq", (a!=null?a.st:null)).put("instr", (instrukcja90!=null?instrukcja90.st:null)).put("num", ((PScope_scope)PScope_stack.peek()).forCount++).put("start", (a!=null?a.start:null)).put("end", (a!=null?a.end:null)).put("varnum", getSymbol((IDENT89!=null?IDENT89.getText():null),"zmienna").count));
            }


            }

        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
        }
        finally {
        }
        return retval;
    }
    // $ANTLR end "instrukcja_dla"

    public static class sekwencja_for_return extends TreeRuleReturnScope {
        public boolean to;
        public Object start;
        public Object end;
        public StringTemplate st;
        public Object getTemplate() { return st; }
        public String toString() { return st==null?null:st.toString(); }
    };

    // $ANTLR start "sekwencja_for"
    // /home/ravn/Workspace/pascal4j/src/pascalWalker.g:665:1: sekwencja_for[int startnum,int fornum] returns [boolean to, Object start, Object end] : ( ^( TO wartosc_poczatkowa wartosc_koncowa ) -> sekwencjaForTo(startnum=$startnumfornum=$fornumend=$wartosc_koncowa.st) | ^( DOWNTO wartosc_poczatkowa wartosc_koncowa ) -> sekwencjaForDownto(startnum=$startnumfornum=$fornumend=$wartosc_koncowa.st));
    public final pascalWalker.sekwencja_for_return sekwencja_for(int startnum, int fornum) throws RecognitionException {
        pascalWalker.sekwencja_for_return retval = new pascalWalker.sekwencja_for_return();
        retval.start = input.LT(1);

        pascalWalker.wartosc_poczatkowa_return wartosc_poczatkowa91 = null;

        pascalWalker.wartosc_koncowa_return wartosc_koncowa92 = null;

        pascalWalker.wartosc_poczatkowa_return wartosc_poczatkowa93 = null;

        pascalWalker.wartosc_koncowa_return wartosc_koncowa94 = null;


        try {
            // /home/ravn/Workspace/pascal4j/src/pascalWalker.g:666:5: ( ^( TO wartosc_poczatkowa wartosc_koncowa ) -> sekwencjaForTo(startnum=$startnumfornum=$fornumend=$wartosc_koncowa.st) | ^( DOWNTO wartosc_poczatkowa wartosc_koncowa ) -> sekwencjaForDownto(startnum=$startnumfornum=$fornumend=$wartosc_koncowa.st))
            int alt52=2;
            int LA52_0 = input.LA(1);

            if ( (LA52_0==TO) ) {
                alt52=1;
            }
            else if ( (LA52_0==DOWNTO) ) {
                alt52=2;
            }
            else {
                NoViableAltException nvae =
                    new NoViableAltException("", 52, 0, input);

                throw nvae;
            }
            switch (alt52) {
                case 1 :
                    // /home/ravn/Workspace/pascal4j/src/pascalWalker.g:666:7: ^( TO wartosc_poczatkowa wartosc_koncowa )
                    {
                    match(input,TO,FOLLOW_TO_in_sekwencja_for4397); 

                    match(input, Token.DOWN, null); 
                    pushFollow(FOLLOW_wartosc_poczatkowa_in_sekwencja_for4399);
                    wartosc_poczatkowa91=wartosc_poczatkowa();

                    state._fsp--;

                    pushFollow(FOLLOW_wartosc_koncowa_in_sekwencja_for4401);
                    wartosc_koncowa92=wartosc_koncowa();

                    state._fsp--;


                    match(input, Token.UP, null); 
                     retval.to =true; retval.start =(wartosc_poczatkowa91!=null?wartosc_poczatkowa91.st:null); retval.end =(wartosc_koncowa92!=null?wartosc_koncowa92.st:null); 


                    // TEMPLATE REWRITE
                    // 666:119: -> sekwencjaForTo(startnum=$startnumfornum=$fornumend=$wartosc_koncowa.st)
                    {
                        retval.st = templateLib.getInstanceOf("sekwencjaForTo",
                      new STAttrMap().put("startnum", startnum).put("fornum", fornum).put("end", (wartosc_koncowa92!=null?wartosc_koncowa92.st:null)));
                    }


                    }
                    break;
                case 2 :
                    // /home/ravn/Workspace/pascal4j/src/pascalWalker.g:667:7: ^( DOWNTO wartosc_poczatkowa wartosc_koncowa )
                    {
                    match(input,DOWNTO,FOLLOW_DOWNTO_in_sekwencja_for4430); 

                    match(input, Token.DOWN, null); 
                    pushFollow(FOLLOW_wartosc_poczatkowa_in_sekwencja_for4432);
                    wartosc_poczatkowa93=wartosc_poczatkowa();

                    state._fsp--;

                    pushFollow(FOLLOW_wartosc_koncowa_in_sekwencja_for4434);
                    wartosc_koncowa94=wartosc_koncowa();

                    state._fsp--;


                    match(input, Token.UP, null); 
                     retval.to =false; retval.start =(wartosc_poczatkowa93!=null?wartosc_poczatkowa93.st:null); retval.end =(wartosc_koncowa94!=null?wartosc_koncowa94.st:null); 


                    // TEMPLATE REWRITE
                    // 667:124: -> sekwencjaForDownto(startnum=$startnumfornum=$fornumend=$wartosc_koncowa.st)
                    {
                        retval.st = templateLib.getInstanceOf("sekwencjaForDownto",
                      new STAttrMap().put("startnum", startnum).put("fornum", fornum).put("end", (wartosc_koncowa94!=null?wartosc_koncowa94.st:null)));
                    }


                    }
                    break;

            }
        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
        }
        finally {
        }
        return retval;
    }
    // $ANTLR end "sekwencja_for"

    public static class wartosc_poczatkowa_return extends TreeRuleReturnScope {
        public StringTemplate st;
        public Object getTemplate() { return st; }
        public String toString() { return st==null?null:st.toString(); }
    };

    // $ANTLR start "wartosc_poczatkowa"
    // /home/ravn/Workspace/pascal4j/src/pascalWalker.g:670:1: wartosc_poczatkowa : wyrazenie -> przekaz(item=$wyrazenie.st);
    public final pascalWalker.wartosc_poczatkowa_return wartosc_poczatkowa() throws RecognitionException {
        pascalWalker.wartosc_poczatkowa_return retval = new pascalWalker.wartosc_poczatkowa_return();
        retval.start = input.LT(1);

        pascalWalker.wyrazenie_return wyrazenie95 = null;


        try {
            // /home/ravn/Workspace/pascal4j/src/pascalWalker.g:671:5: ( wyrazenie -> przekaz(item=$wyrazenie.st))
            // /home/ravn/Workspace/pascal4j/src/pascalWalker.g:671:7: wyrazenie
            {
            pushFollow(FOLLOW_wyrazenie_in_wartosc_poczatkowa4471);
            wyrazenie95=wyrazenie();

            state._fsp--;



            // TEMPLATE REWRITE
            // 671:17: -> przekaz(item=$wyrazenie.st)
            {
                retval.st = templateLib.getInstanceOf("przekaz",
              new STAttrMap().put("item", (wyrazenie95!=null?wyrazenie95.st:null)));
            }


            }

        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
        }
        finally {
        }
        return retval;
    }
    // $ANTLR end "wartosc_poczatkowa"

    public static class wartosc_koncowa_return extends TreeRuleReturnScope {
        public StringTemplate st;
        public Object getTemplate() { return st; }
        public String toString() { return st==null?null:st.toString(); }
    };

    // $ANTLR start "wartosc_koncowa"
    // /home/ravn/Workspace/pascal4j/src/pascalWalker.g:674:1: wartosc_koncowa : wyrazenie -> przekaz(item=$wyrazenie.st);
    public final pascalWalker.wartosc_koncowa_return wartosc_koncowa() throws RecognitionException {
        pascalWalker.wartosc_koncowa_return retval = new pascalWalker.wartosc_koncowa_return();
        retval.start = input.LT(1);

        pascalWalker.wyrazenie_return wyrazenie96 = null;


        try {
            // /home/ravn/Workspace/pascal4j/src/pascalWalker.g:675:5: ( wyrazenie -> przekaz(item=$wyrazenie.st))
            // /home/ravn/Workspace/pascal4j/src/pascalWalker.g:675:7: wyrazenie
            {
            pushFollow(FOLLOW_wyrazenie_in_wartosc_koncowa4497);
            wyrazenie96=wyrazenie();

            state._fsp--;



            // TEMPLATE REWRITE
            // 675:17: -> przekaz(item=$wyrazenie.st)
            {
                retval.st = templateLib.getInstanceOf("przekaz",
              new STAttrMap().put("item", (wyrazenie96!=null?wyrazenie96.st:null)));
            }


            }

        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
        }
        finally {
        }
        return retval;
    }
    // $ANTLR end "wartosc_koncowa"

    public static class instrukcja_wiazaca_return extends TreeRuleReturnScope {
        public StringTemplate st;
        public Object getTemplate() { return st; }
        public String toString() { return st==null?null:st.toString(); }
    };

    // $ANTLR start "instrukcja_wiazaca"
    // /home/ravn/Workspace/pascal4j/src/pascalWalker.g:678:1: instrukcja_wiazaca : ^( WITH a= lista_zmiennych_rekordowych b= instrukcja ) -> instrukcjaWiazaca(rekordy=$a.stinstr=$b.st);
    public final pascalWalker.instrukcja_wiazaca_return instrukcja_wiazaca() throws RecognitionException {
        pascalWalker.instrukcja_wiazaca_return retval = new pascalWalker.instrukcja_wiazaca_return();
        retval.start = input.LT(1);

        pascalWalker.lista_zmiennych_rekordowych_return a = null;

        pascalWalker.instrukcja_return b = null;


        try {
            // /home/ravn/Workspace/pascal4j/src/pascalWalker.g:679:5: ( ^( WITH a= lista_zmiennych_rekordowych b= instrukcja ) -> instrukcjaWiazaca(rekordy=$a.stinstr=$b.st))
            // /home/ravn/Workspace/pascal4j/src/pascalWalker.g:679:7: ^( WITH a= lista_zmiennych_rekordowych b= instrukcja )
            {
            match(input,WITH,FOLLOW_WITH_in_instrukcja_wiazaca4524); 

            match(input, Token.DOWN, null); 
            pushFollow(FOLLOW_lista_zmiennych_rekordowych_in_instrukcja_wiazaca4528);
            a=lista_zmiennych_rekordowych();

            state._fsp--;

            pushFollow(FOLLOW_instrukcja_in_instrukcja_wiazaca4532);
            b=instrukcja();

            state._fsp--;


            match(input, Token.UP, null); 


            // TEMPLATE REWRITE
            // 679:58: -> instrukcjaWiazaca(rekordy=$a.stinstr=$b.st)
            {
                retval.st = templateLib.getInstanceOf("instrukcjaWiazaca",
              new STAttrMap().put("rekordy", (a!=null?a.st:null)).put("instr", (b!=null?b.st:null)));
            }


            }

        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
        }
        finally {
        }
        return retval;
    }
    // $ANTLR end "instrukcja_wiazaca"

    public static class lista_zmiennych_rekordowych_return extends TreeRuleReturnScope {
        public StringTemplate st;
        public Object getTemplate() { return st; }
        public String toString() { return st==null?null:st.toString(); }
    };

    // $ANTLR start "lista_zmiennych_rekordowych"
    // /home/ravn/Workspace/pascal4j/src/pascalWalker.g:682:1: lista_zmiennych_rekordowych : (a+= zmienna )+ -> commaIdlist(ids=$a);
    public final pascalWalker.lista_zmiennych_rekordowych_return lista_zmiennych_rekordowych() throws RecognitionException {
        pascalWalker.lista_zmiennych_rekordowych_return retval = new pascalWalker.lista_zmiennych_rekordowych_return();
        retval.start = input.LT(1);

        List list_a=null;
        pascalWalker.zmienna_return a = null;
         a = null;
        try {
            // /home/ravn/Workspace/pascal4j/src/pascalWalker.g:683:5: ( (a+= zmienna )+ -> commaIdlist(ids=$a))
            // /home/ravn/Workspace/pascal4j/src/pascalWalker.g:683:7: (a+= zmienna )+
            {
            // /home/ravn/Workspace/pascal4j/src/pascalWalker.g:683:8: (a+= zmienna )+
            int cnt53=0;
            loop53:
            do {
                int alt53=2;
                int LA53_0 = input.LA(1);

                if ( (LA53_0==KROPKA||LA53_0==IDENT||LA53_0==LNAWIASKWADRATOWY||LA53_0==LNAWIAS2||LA53_0==WSKAZNIK) ) {
                    alt53=1;
                }


                switch (alt53) {
            	case 1 :
            	    // /home/ravn/Workspace/pascal4j/src/pascalWalker.g:683:8: a+= zmienna
            	    {
            	    pushFollow(FOLLOW_zmienna_in_lista_zmiennych_rekordowych4565);
            	    a=zmienna();

            	    state._fsp--;

            	    if (list_a==null) list_a=new ArrayList();
            	    list_a.add(a.getTemplate());


            	    }
            	    break;

            	default :
            	    if ( cnt53 >= 1 ) break loop53;
                        EarlyExitException eee =
                            new EarlyExitException(53, input);
                        throw eee;
                }
                cnt53++;
            } while (true);



            // TEMPLATE REWRITE
            // 683:19: -> commaIdlist(ids=$a)
            {
                retval.st = templateLib.getInstanceOf("commaIdlist",
              new STAttrMap().put("ids", list_a));
            }


            }

        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
        }
        finally {
        }
        return retval;
    }
    // $ANTLR end "lista_zmiennych_rekordowych"

    // Delegated rules


 

    public static final BitSet FOLLOW_naglowek_programu_in_program74 = new BitSet(new long[]{0x0380002050000010L});
    public static final BitSet FOLLOW_blok_in_program84 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_PROGRAM_in_naglowek_programu123 = new BitSet(new long[]{0x0000000000000004L});
    public static final BitSet FOLLOW_IDENT_in_naglowek_programu125 = new BitSet(new long[]{0x0000000000000028L});
    public static final BitSet FOLLOW_lista_identyfikatorow_in_naglowek_programu127 = new BitSet(new long[]{0x0000000000000008L});
    public static final BitSet FOLLOW_IDENT_in_identyfikator162 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_czesc_deklarujaca_etykiety_in_blok198 = new BitSet(new long[]{0x0380002050000010L});
    public static final BitSet FOLLOW_czesc_definiujaca_stale_in_blok211 = new BitSet(new long[]{0x0380002050000010L});
    public static final BitSet FOLLOW_czesc_definiujaca_typy_in_blok224 = new BitSet(new long[]{0x0380002050000010L});
    public static final BitSet FOLLOW_czesc_deklarujaca_zmienne_in_blok237 = new BitSet(new long[]{0x0380002050000010L});
    public static final BitSet FOLLOW_czesc_deklarujaca_procedury_i_funkcje_in_blok250 = new BitSet(new long[]{0x0380002050000010L});
    public static final BitSet FOLLOW_instrukcja_zlozona_in_blok270 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_LABEL_in_czesc_deklarujaca_etykiety404 = new BitSet(new long[]{0x0000000000000004L});
    public static final BitSet FOLLOW_etykieta_in_czesc_deklarujaca_etykiety408 = new BitSet(new long[]{0x0000000100000008L});
    public static final BitSet FOLLOW_NUM_INT_in_etykieta436 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_CONST_in_czesc_definiujaca_stale470 = new BitSet(new long[]{0x0000000000000004L});
    public static final BitSet FOLLOW_definicja_stalej_in_czesc_definiujaca_stale474 = new BitSet(new long[]{0x0000000080000008L});
    public static final BitSet FOLLOW_ROWNOSC_in_definicja_stalej507 = new BitSet(new long[]{0x0000000000000004L});
    public static final BitSet FOLLOW_IDENT_in_definicja_stalej509 = new BitSet(new long[]{0x0000001F08000000L});
    public static final BitSet FOLLOW_stala_in_definicja_stalej511 = new BitSet(new long[]{0x0000000000000008L});
    public static final BitSet FOLLOW_NUM_INT_in_stala594 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_NUM_REAL_in_stala613 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_PLUS_in_stala634 = new BitSet(new long[]{0x0000000000000004L});
    public static final BitSet FOLLOW_NUM_INT_in_stala649 = new BitSet(new long[]{0x0000000000000008L});
    public static final BitSet FOLLOW_NUM_REAL_in_stala662 = new BitSet(new long[]{0x0000000000000008L});
    public static final BitSet FOLLOW_IDENT_in_stala675 = new BitSet(new long[]{0x0000000000000008L});
    public static final BitSet FOLLOW_MINUS_in_stala716 = new BitSet(new long[]{0x0000000000000004L});
    public static final BitSet FOLLOW_NUM_INT_in_stala731 = new BitSet(new long[]{0x0000000000000008L});
    public static final BitSet FOLLOW_NUM_REAL_in_stala744 = new BitSet(new long[]{0x0000000000000008L});
    public static final BitSet FOLLOW_IDENT_in_stala757 = new BitSet(new long[]{0x0000000000000008L});
    public static final BitSet FOLLOW_IDENT_in_stala797 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_STRING_LITERAL_in_stala816 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_STRING_LITERAL_in_napis844 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_TYPE_in_czesc_definiujaca_typy872 = new BitSet(new long[]{0x0000000000000004L});
    public static final BitSet FOLLOW_definicja_typu_in_czesc_definiujaca_typy876 = new BitSet(new long[]{0x0000000000080008L});
    public static final BitSet FOLLOW_TYPEDECL_in_definicja_typu907 = new BitSet(new long[]{0x0000000000000004L});
    public static final BitSet FOLLOW_IDENT_in_definicja_typu909 = new BitSet(new long[]{0x00441FC008200100L});
    public static final BitSet FOLLOW_nowy_typ_in_definicja_typu911 = new BitSet(new long[]{0x0000000000000008L});
    public static final BitSet FOLLOW_SCALARTYPE_in_nowy_typ949 = new BitSet(new long[]{0x0000000000000004L});
    public static final BitSet FOLLOW_lista_identyfikatorow_in_nowy_typ951 = new BitSet(new long[]{0x0000000000000008L});
    public static final BitSet FOLLOW_DWIEKROPKI_in_nowy_typ972 = new BitSet(new long[]{0x0000000000000004L});
    public static final BitSet FOLLOW_stala_in_nowy_typ976 = new BitSet(new long[]{0x0000001F08000000L});
    public static final BitSet FOLLOW_stala_in_nowy_typ980 = new BitSet(new long[]{0x0000000000000008L});
    public static final BitSet FOLLOW_identyfikator_typu_in_nowy_typ1004 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_nowy_typ_strukturalny_in_nowy_typ1022 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_WSKAZNIK_in_nowy_typ1041 = new BitSet(new long[]{0x0000000000000004L});
    public static final BitSet FOLLOW_identyfikator_typu_in_nowy_typ1043 = new BitSet(new long[]{0x0000000000000008L});
    public static final BitSet FOLLOW_IDENT_in_identyfikator_typu1076 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_CHAR_in_identyfikator_typu1095 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_BOOLEAN_in_identyfikator_typu1113 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_INTEGER_in_identyfikator_typu1132 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_REAL_in_identyfikator_typu1151 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_STRING_in_identyfikator_typu1172 = new BitSet(new long[]{0x0000000000000004L});
    public static final BitSet FOLLOW_IDENT_in_identyfikator_typu1185 = new BitSet(new long[]{0x0000000000000008L});
    public static final BitSet FOLLOW_NUM_INT_in_identyfikator_typu1198 = new BitSet(new long[]{0x0000000000000008L});
    public static final BitSet FOLLOW_NUM_REAL_in_identyfikator_typu1211 = new BitSet(new long[]{0x0000000000000008L});
    public static final BitSet FOLLOW_PACKED_in_nowy_typ_strukturalny1271 = new BitSet(new long[]{0x0000000000000004L});
    public static final BitSet FOLLOW_typ_strukturalny_niespakowany_in_nowy_typ_strukturalny1273 = new BitSet(new long[]{0x0000000000000008L});
    public static final BitSet FOLLOW_typ_strukturalny_niespakowany_in_nowy_typ_strukturalny1291 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_typ_tablicowy_in_typ_strukturalny_niespakowany1317 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_typ_rekordowy_in_typ_strukturalny_niespakowany1334 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ARRAY_in_typ_tablicowy1361 = new BitSet(new long[]{0x0000000000000004L});
    public static final BitSet FOLLOW_lista_typow_indeksowych_in_typ_tablicowy1363 = new BitSet(new long[]{0x00441FC008200100L});
    public static final BitSet FOLLOW_nowy_typ_in_typ_tablicowy1365 = new BitSet(new long[]{0x0000000000000008L});
    public static final BitSet FOLLOW_TYPELIST_in_lista_typow_indeksowych1398 = new BitSet(new long[]{0x0000000000000004L});
    public static final BitSet FOLLOW_nowy_typ_in_lista_typow_indeksowych1402 = new BitSet(new long[]{0x00441FC008200108L});
    public static final BitSet FOLLOW_RECORD_in_typ_rekordowy1432 = new BitSet(new long[]{0x0000000000000004L});
    public static final BitSet FOLLOW_lista_pol_in_typ_rekordowy1434 = new BitSet(new long[]{0x0000000000000008L});
    public static final BitSet FOLLOW_FIELDLIST_in_lista_pol1463 = new BitSet(new long[]{0x0000000000000004L});
    public static final BitSet FOLLOW_czesc_stala_in_lista_pol1478 = new BitSet(new long[]{0x0020000000000008L});
    public static final BitSet FOLLOW_czesc_zmienna_in_lista_pol1482 = new BitSet(new long[]{0x0000000000000008L});
    public static final BitSet FOLLOW_czesc_zmienna_in_lista_pol1498 = new BitSet(new long[]{0x0000000000000008L});
    public static final BitSet FOLLOW_sekcja_rekordu_in_czesc_stala1551 = new BitSet(new long[]{0x0000000000100002L});
    public static final BitSet FOLLOW_FIELD_in_sekcja_rekordu1582 = new BitSet(new long[]{0x0000000000000004L});
    public static final BitSet FOLLOW_nowy_typ_in_sekcja_rekordu1584 = new BitSet(new long[]{0x0000000000000020L});
    public static final BitSet FOLLOW_lista_identyfikatorow_in_sekcja_rekordu1586 = new BitSet(new long[]{0x0000000000000008L});
    public static final BitSet FOLLOW_CASE_in_czesc_zmienna1619 = new BitSet(new long[]{0x0000000000000004L});
    public static final BitSet FOLLOW_selektor_wariantu_in_czesc_zmienna1623 = new BitSet(new long[]{0x0000000000001000L});
    public static final BitSet FOLLOW_wariant_in_czesc_zmienna1627 = new BitSet(new long[]{0x0000000000001008L});
    public static final BitSet FOLLOW_VARIANT_TAG_in_selektor_wariantu1661 = new BitSet(new long[]{0x0000000000000004L});
    public static final BitSet FOLLOW_identyfikator_in_selektor_wariantu1663 = new BitSet(new long[]{0x000007C008000000L});
    public static final BitSet FOLLOW_identyfikator_typu_in_selektor_wariantu1665 = new BitSet(new long[]{0x0000000000000008L});
    public static final BitSet FOLLOW_VARIANT_TAG_NO_ID_in_selektor_wariantu1688 = new BitSet(new long[]{0x0000000000000004L});
    public static final BitSet FOLLOW_identyfikator_typu_in_selektor_wariantu1690 = new BitSet(new long[]{0x0000000000000008L});
    public static final BitSet FOLLOW_VARIANT_CASE_in_wariant1718 = new BitSet(new long[]{0x0000000000000004L});
    public static final BitSet FOLLOW_lista_stalych_wyboru_in_wariant1720 = new BitSet(new long[]{0x0000000000004000L});
    public static final BitSet FOLLOW_lista_pol_in_wariant1722 = new BitSet(new long[]{0x0000000000000008L});
    public static final BitSet FOLLOW_VAR_in_czesc_deklarujaca_zmienne1760 = new BitSet(new long[]{0x0000000000000004L});
    public static final BitSet FOLLOW_deklaracja_zmiennej_in_czesc_deklarujaca_zmienne1764 = new BitSet(new long[]{0x0000000000010008L});
    public static final BitSet FOLLOW_VARDECL_in_deklaracja_zmiennej1800 = new BitSet(new long[]{0x0000000000000004L});
    public static final BitSet FOLLOW_nowy_typ_in_deklaracja_zmiennej1802 = new BitSet(new long[]{0x0000000000000020L});
    public static final BitSet FOLLOW_lista_identyfikatorow_in_deklaracja_zmiennej1804 = new BitSet(new long[]{0x0000000000000008L});
    public static final BitSet FOLLOW_deklaracja_procedury_lub_funkcji_in_czesc_deklarujaca_procedury_i_funkcje1887 = new BitSet(new long[]{0x0380002050000002L});
    public static final BitSet FOLLOW_deklaracja_procedury_in_deklaracja_procedury_lub_funkcji1916 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_deklaracja_funkcji_in_deklaracja_procedury_lub_funkcji1935 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_PROCEDURE_in_deklaracja_procedury1973 = new BitSet(new long[]{0x0000000000000004L});
    public static final BitSet FOLLOW_IDENT_in_deklaracja_procedury1975 = new BitSet(new long[]{0x0380002050008010L});
    public static final BitSet FOLLOW_lista_parametrow_formalnych_in_deklaracja_procedury1977 = new BitSet(new long[]{0x0380002050000010L});
    public static final BitSet FOLLOW_blok_in_deklaracja_procedury1980 = new BitSet(new long[]{0x0000000000000008L});
    public static final BitSet FOLLOW_ARGDECLS_in_lista_parametrow_formalnych2040 = new BitSet(new long[]{0x0000000000000004L});
    public static final BitSet FOLLOW_sekcja_parametrow_formalnych_in_lista_parametrow_formalnych2044 = new BitSet(new long[]{0x0080000000020008L});
    public static final BitSet FOLLOW_grupa_parametrow_in_sekcja_parametrow_formalnych2083 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_VAR_in_sekcja_parametrow_formalnych2108 = new BitSet(new long[]{0x0000000000000004L});
    public static final BitSet FOLLOW_grupa_parametrow_in_sekcja_parametrow_formalnych2110 = new BitSet(new long[]{0x0000000000000008L});
    public static final BitSet FOLLOW_ARGDECL_in_grupa_parametrow2146 = new BitSet(new long[]{0x0000000000000004L});
    public static final BitSet FOLLOW_identyfikator_typu_in_grupa_parametrow2148 = new BitSet(new long[]{0x0000000000000020L});
    public static final BitSet FOLLOW_lista_identyfikatorow_in_grupa_parametrow2150 = new BitSet(new long[]{0x0000000000000008L});
    public static final BitSet FOLLOW_IDLIST_in_lista_identyfikatorow2191 = new BitSet(new long[]{0x0000000000000004L});
    public static final BitSet FOLLOW_identyfikator_w_procedurze_in_lista_identyfikatorow2195 = new BitSet(new long[]{0x0000000008000008L});
    public static final BitSet FOLLOW_IDENT_in_identyfikator_w_procedurze2233 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_CONSTLIST_in_lista_stalych_wyboru2259 = new BitSet(new long[]{0x0000000000000004L});
    public static final BitSet FOLLOW_stala_in_lista_stalych_wyboru2263 = new BitSet(new long[]{0x0000001F08000008L});
    public static final BitSet FOLLOW_FUNCTION_in_deklaracja_funkcji2302 = new BitSet(new long[]{0x0000000000000004L});
    public static final BitSet FOLLOW_IDENT_in_deklaracja_funkcji2304 = new BitSet(new long[]{0x000007C008008000L});
    public static final BitSet FOLLOW_lista_parametrow_formalnych_in_deklaracja_funkcji2306 = new BitSet(new long[]{0x000007C008008000L});
    public static final BitSet FOLLOW_typ_wyniku_in_deklaracja_funkcji2309 = new BitSet(new long[]{0x0380002050000010L});
    public static final BitSet FOLLOW_blok_in_deklaracja_funkcji2311 = new BitSet(new long[]{0x0000000000000008L});
    public static final BitSet FOLLOW_identyfikator_typu_in_typ_wyniku2365 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_DWUKROPEK_in_instrukcja2392 = new BitSet(new long[]{0x0000000000000004L});
    public static final BitSet FOLLOW_etykieta_in_instrukcja2394 = new BitSet(new long[]{0x07A0002050000090L,0x0000000000254A00L});
    public static final BitSet FOLLOW_instrukcja_bez_etykiety_in_instrukcja2396 = new BitSet(new long[]{0x0000000000000008L});
    public static final BitSet FOLLOW_instrukcja_bez_etykiety_in_instrukcja2418 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_instrukcja_prosta_in_instrukcja_bez_etykiety2444 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_instrukcja_strukturalna_in_instrukcja_bez_etykiety2461 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_instrukcja_przypisania_in_instrukcja_prosta2487 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_instrukcja_procedury_in_instrukcja_prosta2504 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_instrukcja_skoku_in_instrukcja_prosta2521 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_PRZYPISANIE_in_instrukcja_przypisania2548 = new BitSet(new long[]{0x0000000000000004L});
    public static final BitSet FOLLOW_zmienna_in_instrukcja_przypisania2550 = new BitSet(new long[]{0xF841201F88400040L,0x00000000000001FFL});
    public static final BitSet FOLLOW_wyrazenie_in_instrukcja_przypisania2552 = new BitSet(new long[]{0x0000000000000008L});
    public static final BitSet FOLLOW_LNAWIASKWADRATOWY_in_zmienna2604 = new BitSet(new long[]{0x0000000000000004L});
    public static final BitSet FOLLOW_zmienna_in_zmienna2608 = new BitSet(new long[]{0xF841201F88400040L,0x00000000000001FFL});
    public static final BitSet FOLLOW_wyrazenie_in_zmienna2612 = new BitSet(new long[]{0xF841201F88400048L,0x00000000000001FFL});
    public static final BitSet FOLLOW_LNAWIAS2_in_zmienna2638 = new BitSet(new long[]{0x0000000000000004L});
    public static final BitSet FOLLOW_zmienna_in_zmienna2642 = new BitSet(new long[]{0xF841201F88400040L,0x00000000000001FFL});
    public static final BitSet FOLLOW_wyrazenie_in_zmienna2646 = new BitSet(new long[]{0xF841201F88400048L,0x00000000000001FFL});
    public static final BitSet FOLLOW_KROPKA_in_zmienna2672 = new BitSet(new long[]{0x0000000000000004L});
    public static final BitSet FOLLOW_zmienna_in_zmienna2676 = new BitSet(new long[]{0x0000000008000000L});
    public static final BitSet FOLLOW_IDENT_in_zmienna2678 = new BitSet(new long[]{0x0000000000000008L});
    public static final BitSet FOLLOW_WSKAZNIK_in_zmienna2703 = new BitSet(new long[]{0x0000000000000004L});
    public static final BitSet FOLLOW_zmienna_in_zmienna2707 = new BitSet(new long[]{0x0000000000000008L});
    public static final BitSet FOLLOW_IDENT_in_zmienna2727 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ROWNOSC_in_wyrazenie2780 = new BitSet(new long[]{0x0000000000000004L});
    public static final BitSet FOLLOW_wyrazenie_in_wyrazenie2784 = new BitSet(new long[]{0xF841201F88400040L,0x00000000000001FFL});
    public static final BitSet FOLLOW_wyrazenie_in_wyrazenie2788 = new BitSet(new long[]{0x0000000000000008L});
    public static final BitSet FOLLOW_NIEROWNOSC_in_wyrazenie2821 = new BitSet(new long[]{0x0000000000000004L});
    public static final BitSet FOLLOW_wyrazenie_in_wyrazenie2825 = new BitSet(new long[]{0xF841201F88400040L,0x00000000000001FFL});
    public static final BitSet FOLLOW_wyrazenie_in_wyrazenie2829 = new BitSet(new long[]{0x0000000000000008L});
    public static final BitSet FOLLOW_MNIEJSZY_in_wyrazenie2862 = new BitSet(new long[]{0x0000000000000004L});
    public static final BitSet FOLLOW_wyrazenie_in_wyrazenie2866 = new BitSet(new long[]{0xF841201F88400040L,0x00000000000001FFL});
    public static final BitSet FOLLOW_wyrazenie_in_wyrazenie2870 = new BitSet(new long[]{0x0000000000000008L});
    public static final BitSet FOLLOW_MNIEJSZYLUBROWNY_in_wyrazenie2903 = new BitSet(new long[]{0x0000000000000004L});
    public static final BitSet FOLLOW_wyrazenie_in_wyrazenie2907 = new BitSet(new long[]{0xF841201F88400040L,0x00000000000001FFL});
    public static final BitSet FOLLOW_wyrazenie_in_wyrazenie2911 = new BitSet(new long[]{0x0000000000000008L});
    public static final BitSet FOLLOW_WIEKSZY_in_wyrazenie2944 = new BitSet(new long[]{0x0000000000000004L});
    public static final BitSet FOLLOW_wyrazenie_in_wyrazenie2948 = new BitSet(new long[]{0xF841201F88400040L,0x00000000000001FFL});
    public static final BitSet FOLLOW_wyrazenie_in_wyrazenie2952 = new BitSet(new long[]{0x0000000000000008L});
    public static final BitSet FOLLOW_WIEKSZYLUBROWNY_in_wyrazenie2985 = new BitSet(new long[]{0x0000000000000004L});
    public static final BitSet FOLLOW_wyrazenie_in_wyrazenie2989 = new BitSet(new long[]{0xF841201F88400040L,0x00000000000001FFL});
    public static final BitSet FOLLOW_wyrazenie_in_wyrazenie2993 = new BitSet(new long[]{0x0000000000000008L});
    public static final BitSet FOLLOW_IN_in_wyrazenie3026 = new BitSet(new long[]{0x0000000000000004L});
    public static final BitSet FOLLOW_wyrazenie_in_wyrazenie3030 = new BitSet(new long[]{0xF841201F88400040L,0x00000000000001FFL});
    public static final BitSet FOLLOW_wyrazenie_in_wyrazenie3034 = new BitSet(new long[]{0x0000000000000008L});
    public static final BitSet FOLLOW_PLUS_in_wyrazenie3059 = new BitSet(new long[]{0x0000000000000004L});
    public static final BitSet FOLLOW_wyrazenie_in_wyrazenie3063 = new BitSet(new long[]{0xF841201F88400048L,0x00000000000001FFL});
    public static final BitSet FOLLOW_wyrazenie_in_wyrazenie3067 = new BitSet(new long[]{0x0000000000000008L});
    public static final BitSet FOLLOW_MINUS_in_wyrazenie3097 = new BitSet(new long[]{0x0000000000000004L});
    public static final BitSet FOLLOW_wyrazenie_in_wyrazenie3101 = new BitSet(new long[]{0xF841201F88400048L,0x00000000000001FFL});
    public static final BitSet FOLLOW_wyrazenie_in_wyrazenie3105 = new BitSet(new long[]{0x0000000000000008L});
    public static final BitSet FOLLOW_OR_in_wyrazenie3135 = new BitSet(new long[]{0x0000000000000004L});
    public static final BitSet FOLLOW_wyrazenie_in_wyrazenie3139 = new BitSet(new long[]{0xF841201F88400040L,0x00000000000001FFL});
    public static final BitSet FOLLOW_wyrazenie_in_wyrazenie3143 = new BitSet(new long[]{0x0000000000000008L});
    public static final BitSet FOLLOW_GWIAZDKA_in_wyrazenie3168 = new BitSet(new long[]{0x0000000000000004L});
    public static final BitSet FOLLOW_wyrazenie_in_wyrazenie3172 = new BitSet(new long[]{0xF841201F88400040L,0x00000000000001FFL});
    public static final BitSet FOLLOW_wyrazenie_in_wyrazenie3176 = new BitSet(new long[]{0x0000000000000008L});
    public static final BitSet FOLLOW_SLASH_in_wyrazenie3205 = new BitSet(new long[]{0x0000000000000004L});
    public static final BitSet FOLLOW_wyrazenie_in_wyrazenie3209 = new BitSet(new long[]{0xF841201F88400040L,0x00000000000001FFL});
    public static final BitSet FOLLOW_wyrazenie_in_wyrazenie3213 = new BitSet(new long[]{0x0000000000000008L});
    public static final BitSet FOLLOW_DIV_in_wyrazenie3242 = new BitSet(new long[]{0x0000000000000004L});
    public static final BitSet FOLLOW_wyrazenie_in_wyrazenie3246 = new BitSet(new long[]{0xF841201F88400040L,0x00000000000001FFL});
    public static final BitSet FOLLOW_wyrazenie_in_wyrazenie3250 = new BitSet(new long[]{0x0000000000000008L});
    public static final BitSet FOLLOW_MOD_in_wyrazenie3279 = new BitSet(new long[]{0x0000000000000004L});
    public static final BitSet FOLLOW_wyrazenie_in_wyrazenie3283 = new BitSet(new long[]{0xF841201F88400040L,0x00000000000001FFL});
    public static final BitSet FOLLOW_wyrazenie_in_wyrazenie3287 = new BitSet(new long[]{0x0000000000000008L});
    public static final BitSet FOLLOW_AND_in_wyrazenie3312 = new BitSet(new long[]{0x0000000000000004L});
    public static final BitSet FOLLOW_wyrazenie_in_wyrazenie3316 = new BitSet(new long[]{0xF841201F88400040L,0x00000000000001FFL});
    public static final BitSet FOLLOW_wyrazenie_in_wyrazenie3320 = new BitSet(new long[]{0x0000000000000008L});
    public static final BitSet FOLLOW_NOT_in_wyrazenie3345 = new BitSet(new long[]{0x0000000000000004L});
    public static final BitSet FOLLOW_wyrazenie_in_wyrazenie3349 = new BitSet(new long[]{0x0000000000000008L});
    public static final BitSet FOLLOW_zmienna_in_wyrazenie3369 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_nazewnik_funkcji_in_wyrazenie3388 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_NUM_INT_in_wyrazenie3406 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_NUM_REAL_in_wyrazenie3426 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_napis_in_wyrazenie3445 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_NIL_in_wyrazenie3464 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_FUNC_CALL_in_nazewnik_funkcji3497 = new BitSet(new long[]{0x0000000000000004L});
    public static final BitSet FOLLOW_IDENT_in_nazewnik_funkcji3499 = new BitSet(new long[]{0x0000000000040008L});
    public static final BitSet FOLLOW_lista_parametrow_aktualnych_in_nazewnik_funkcji3501 = new BitSet(new long[]{0x0000000000000008L});
    public static final BitSet FOLLOW_ARGLIST_in_lista_parametrow_aktualnych3552 = new BitSet(new long[]{0x0000000000000004L});
    public static final BitSet FOLLOW_parametr_aktualny_in_lista_parametrow_aktualnych3556 = new BitSet(new long[]{0xF841201F88400048L,0x00000000000001FFL});
    public static final BitSet FOLLOW_DWIEKROPKI_in_element3594 = new BitSet(new long[]{0x0000000000000004L});
    public static final BitSet FOLLOW_wyrazenie_in_element3596 = new BitSet(new long[]{0xF841201F88400040L,0x00000000000001FFL});
    public static final BitSet FOLLOW_wyrazenie_in_element3598 = new BitSet(new long[]{0x0000000000000008L});
    public static final BitSet FOLLOW_wyrazenie_in_element3607 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_PROC_CALL_in_instrukcja_procedury3625 = new BitSet(new long[]{0x0000000000000004L});
    public static final BitSet FOLLOW_IDENT_in_instrukcja_procedury3627 = new BitSet(new long[]{0x0000000000040008L});
    public static final BitSet FOLLOW_lista_parametrow_aktualnych_in_instrukcja_procedury3629 = new BitSet(new long[]{0x0000000000000008L});
    public static final BitSet FOLLOW_wyrazenie_in_parametr_aktualny3727 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_GOTO_in_instrukcja_skoku3760 = new BitSet(new long[]{0x0000000000000004L});
    public static final BitSet FOLLOW_etykieta_in_instrukcja_skoku3762 = new BitSet(new long[]{0x0000000000000008L});
    public static final BitSet FOLLOW_instrukcja_zlozona_in_instrukcja_strukturalna3789 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_instrukcja_warunkowa_in_instrukcja_strukturalna3806 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_instrukcja_iteracyjna_in_instrukcja_strukturalna3823 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_instrukcja_wiazaca_in_instrukcja_strukturalna3840 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ciag_instrukcji_in_instrukcja_zlozona3870 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_BLOCK_in_ciag_instrukcji3903 = new BitSet(new long[]{0x0000000000000004L});
    public static final BitSet FOLLOW_instrukcja_in_ciag_instrukcji3907 = new BitSet(new long[]{0x07B0002050000098L,0x0000000000254A00L});
    public static final BitSet FOLLOW_instrukcja_jesli_in_instrukcja_warunkowa3936 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_instrukcja_wyboru_in_instrukcja_warunkowa3953 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_IF_in_instrukcja_jesli3980 = new BitSet(new long[]{0x0000000000000004L});
    public static final BitSet FOLLOW_wyrazenie_in_instrukcja_jesli3984 = new BitSet(new long[]{0x07B0002050000098L,0x0000000000254A00L});
    public static final BitSet FOLLOW_instrukcja_in_instrukcja_jesli3988 = new BitSet(new long[]{0x07B0002050000098L,0x0000000000254A00L});
    public static final BitSet FOLLOW_instrukcja_in_instrukcja_jesli3992 = new BitSet(new long[]{0x0000000000000008L});
    public static final BitSet FOLLOW_CASE_in_instrukcja_wyboru4036 = new BitSet(new long[]{0x0000000000000004L});
    public static final BitSet FOLLOW_wyrazenie_in_instrukcja_wyboru4040 = new BitSet(new long[]{0x0010000000000000L});
    public static final BitSet FOLLOW_element_listy_wyboru_in_instrukcja_wyboru4052 = new BitSet(new long[]{0x0390002050000018L});
    public static final BitSet FOLLOW_ciag_instrukcji_in_instrukcja_wyboru4065 = new BitSet(new long[]{0x0000000000000008L});
    public static final BitSet FOLLOW_DWUKROPEK_in_element_listy_wyboru4115 = new BitSet(new long[]{0x0000000000000004L});
    public static final BitSet FOLLOW_lista_stalych_wyboru_in_element_listy_wyboru4117 = new BitSet(new long[]{0x07B0002050000098L,0x0000000000254A00L});
    public static final BitSet FOLLOW_instrukcja_in_element_listy_wyboru4119 = new BitSet(new long[]{0x0000000000000008L});
    public static final BitSet FOLLOW_instrukcja_dopoki_in_instrukcja_iteracyjna4150 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_instrukcja_powtarzaj_in_instrukcja_iteracyjna4167 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_instrukcja_dla_in_instrukcja_iteracyjna4184 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_WHILE_in_instrukcja_dopoki4211 = new BitSet(new long[]{0x0000000000000004L});
    public static final BitSet FOLLOW_wyrazenie_in_instrukcja_dopoki4213 = new BitSet(new long[]{0x07B0002050000098L,0x0000000000254A00L});
    public static final BitSet FOLLOW_instrukcja_in_instrukcja_dopoki4215 = new BitSet(new long[]{0x0000000000000008L});
    public static final BitSet FOLLOW_REPEAT_in_instrukcja_powtarzaj4251 = new BitSet(new long[]{0x0000000000000004L});
    public static final BitSet FOLLOW_ciag_instrukcji_in_instrukcja_powtarzaj4253 = new BitSet(new long[]{0xF841201F88400040L,0x00000000000001FFL});
    public static final BitSet FOLLOW_wyrazenie_in_instrukcja_powtarzaj4255 = new BitSet(new long[]{0x0000000000000008L});
    public static final BitSet FOLLOW_FOR_in_instrukcja_dla4292 = new BitSet(new long[]{0x0000000000000004L});
    public static final BitSet FOLLOW_IDENT_in_instrukcja_dla4294 = new BitSet(new long[]{0x0000000000000000L,0x0000000000180000L});
    public static final BitSet FOLLOW_sekwencja_for_in_instrukcja_dla4298 = new BitSet(new long[]{0x07B0002050000098L,0x0000000000254A00L});
    public static final BitSet FOLLOW_instrukcja_in_instrukcja_dla4301 = new BitSet(new long[]{0x0000000000000008L});
    public static final BitSet FOLLOW_TO_in_sekwencja_for4397 = new BitSet(new long[]{0x0000000000000004L});
    public static final BitSet FOLLOW_wartosc_poczatkowa_in_sekwencja_for4399 = new BitSet(new long[]{0xF841201F88400040L,0x00000000000001FFL});
    public static final BitSet FOLLOW_wartosc_koncowa_in_sekwencja_for4401 = new BitSet(new long[]{0x0000000000000008L});
    public static final BitSet FOLLOW_DOWNTO_in_sekwencja_for4430 = new BitSet(new long[]{0x0000000000000004L});
    public static final BitSet FOLLOW_wartosc_poczatkowa_in_sekwencja_for4432 = new BitSet(new long[]{0xF841201F88400040L,0x00000000000001FFL});
    public static final BitSet FOLLOW_wartosc_koncowa_in_sekwencja_for4434 = new BitSet(new long[]{0x0000000000000008L});
    public static final BitSet FOLLOW_wyrazenie_in_wartosc_poczatkowa4471 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_wyrazenie_in_wartosc_koncowa4497 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_WITH_in_instrukcja_wiazaca4524 = new BitSet(new long[]{0x0000000000000004L});
    public static final BitSet FOLLOW_lista_zmiennych_rekordowych_in_instrukcja_wiazaca4528 = new BitSet(new long[]{0x07B0002050000098L,0x0000000000254A00L});
    public static final BitSet FOLLOW_instrukcja_in_instrukcja_wiazaca4532 = new BitSet(new long[]{0x0000000000000008L});
    public static final BitSet FOLLOW_zmienna_in_lista_zmiennych_rekordowych4565 = new BitSet(new long[]{0x0041200008400002L});

}